Frage

habe ich ein Problem mit einer Textdatei von ANSI zu UTF8 in c # zu konvertieren. Ich versuche, die Ergebnisse in einem Browser angezeigt werden soll.

So habe ich eine dieser Textdatei mit vielen Akzente Zeichen darin. Seine in ANSI codiert, so dass ich es auf UTF-8 zu konvertieren, weil im Browser anstelle der accentchars erscheint „?“. Egal, wie ich zu konvertieren UTF8 versuchte, es war immer noch ein „?“. Aber wenn ich die Textdatei in Notepad ++ auf UTF-8 konvertieren dann sind die Akzent Zeichen desplayed gut.

Hier ist ein Frieden des Codierungscode, dass ich gemacht:

    public string Encode(string text)
    {
        // encode the string as an ASCII byte array
        byte[] myASCIIBytes = ASCIIEncoding.ASCII.GetBytes(text);

        // convert the ASCII byte array to a UTF-8 byte array
        byte[] myUTF8Bytes = ASCIIEncoding.Convert(ASCIIEncoding.ASCII, UTF8Encoding.UTF8, myASCIIBytes);

        // reconstitute a string from the UTF-8 byte array 
        return UTF8Encoding.UTF8.GetString(myUTF8Bytes);
    }

Haben Sie eine Ahnung, warum ist das passiert?

War es hilfreich?

Lösung

Haben Sie eine Ahnung, warum ist das passiert?

Ja, du bist zu spät. Sie müssen ANSI angeben, wenn Sie die Zeichenfolge aus der Datei lesen. In Erinnerung ist es immer Unicode (UTF16).

Andere Tipps

Wenn Sie in ASCII konvertieren verlieren Sie sofort alle nicht-englischen Zeichen (darunter auch solche mit Akzent), weil ASCII nur 127 (7 Bit) Zeichen.

Sie tun seltsame Manipulation. string in .net ist in UTF-16, so dass, sobald Sie string zurückkehren, nicht byte[] dies egal ist.

Ich glaube, Sie tun sollten: (I durch ANSI denke, man mittlere Latin1)

public byte[] Encode(string text)
{
    return Encoding.GetEncoding(1252).GetBytes(text);
}

Da die Frage nicht ganz klar war, gibt es eine vernünftige Bemerkung, dass Sie tatsächlich diese eine benötigen:

public string Decode(byte[] data)
{
    return Encoding.GetEncoding(1252).GetString(data);
}

Dies ist wahrscheinlich der einfachste Weg:

byte[] ansiBytes = File.ReadAllBytes("inputfilename.txt");
var utf8String = Encoding.Default.GetString(ansiBytes);
File.WriteAllText("outputfilename.txt", utf8String);

Ich würde empfehlen, dies zu lesen http://www.joelonsoftware.com/articles/Unicode .html .
Wenn Sie eine ASCII-Datei lesen gehen müssen Sie die Codepage der Datei kennen.

Dies geschieht wahrscheinlich, weil Ihr ursprünglicher string text bereits ungültige Zeichen enthält. Encoding Umwandlung macht nur Sinn, wenn Sie Ihre Eingabe ein Byte-Array ist. Also, sollten Sie die Datei als Byte-Array statt String gelesen, oder, wie Henk sagte, geben Sie die Codierung für die Datei zu lesen.

Meine Gedanken hier, wenn Sie speichern Sie die Datei in Notepad ++ es die Einsätze Byte-Order-Mark so kann der Browser, dass es die UTF8 daraus schließen. Sonst würden Sie wahrscheinlich explizit müssen Sie dem Browser die Zeichenkodierung sagen, wie es in der DTD in XML etc.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top