¿Es posible en la cadena c # reemplazar todos los caracteres no ascii con un código? Tengo una aplicación que imprime en una impresora de etiquetas Zebra con ZPL. Necesita todos los caracteres UTF-8 en un código con subrayado inicial. Por ejemplo, si el usuario quiere imprimir µ (micro símbolo) tengo que hacer

text = text.replace("µ", "_c2_b5");  //c2b5 is the UTF8 code for µ

Ejemplo "Helloµ ±" debería convertirse en "Hello_c2_b5_c2_b1"

c#
0
Jamsheer Moideen 11 jul. 2021 a las 08:14

3 respuestas

La mejor respuesta

Esto ayudará:

var source =  "Helloµ±";
var sb = new StringBuilder();
foreach (char c in source)
{
    if (c == '_')
    {
        // special case: Replace _ With _5f
        sb.Append("_5f");
    }
    else if (c < 32 || c > 127)
    {
        // handle non-ascii by using hex representation of bytes
        // TODO: check whether "surrogate pairs" are handled correctly (if required)
        var ba = Encoding.UTF8.GetBytes(new[] { c });
        foreach (byte b in ba)
        {
            sb.AppendFormat("_{0:x2}", b);
        }   
    }
    else
    {
        // in printable ASCII range, so just copy
        sb.Append(c);
    }
}

Console.WriteLine(sb.ToString());

Esto da como resultado "Hello_c2_b5_c2_b1"

Depende de usted envolver esto en un buen método.

1
Jamsheer Moideen 13 jul. 2021 a las 06:26

Puedes probar esto.

var bytes = System.Text.Encoding.ASCII.GetBytes("søme string");
string result = System.Text.Encoding.UTF8.GetString(bytes);
-1
Pramod Narayan 11 jul. 2021 a las 11:09

Aquí está el ejemplo en el que reemplaza todo el código de caracteres no ascii de una cadena:

string s = "søme string";
s = Regex.Replace(s, @"[^\u0000-\u007F]+", string.Empty);
-2
Harshil Kansagara 11 jul. 2021 a las 05:24