2017-05-15 2 views
0

Ich habe ein Problem mit der Konvertierung von Text von und in UTF-8-Kodierung. Hier habe ich Byte-Array,UTF-8 Kodierung und Dekodierung Problem

byte[] c = new byte[] { 1, 2, 200 }; 

Ich Umwandlung in UTF-8-String und zurück zu Byte-Array,

Encoding.UTF8.GetBytes(Encoding.UTF8.GetString(c)); 

Nach meinem zu verstehen, was ich von diesem erwartet werden soll, ist ein Array mit 3 Bytes. Recht? Aber hier ist, was ich bekomme.

byte[5] { 1, 2, 239, 191, 189 } 

Was ist der Grund dafür? Ich verstehe die 239, 191, 189 Kombination heißt in UTF-8 Specials.

Auch das ist Teil eines größeren Problems.

+1

Warum machst du das? {1, 2, 3, 200} ist * nicht * Text codiert als UTF-8. Wenn Sie beabsichtigen, beliebige binäre Daten zu propagieren, verwenden Sie base64. Es klingt, als würden Sie nicht "Text konvertieren" - Sie konvertieren binäre Daten. –

Antwort

2

Nicht alle Sequenzen von Bytes sind gültig UTF-8. Es scheint, dass Ihr Array (1, 2, 200) in UTF-8 ungültig ist (das ist, warum diese speziellen Fehlerzeichen hinzugefügt wird)

MSDN sagt über Encoding.UTF8:

Es gibt ein UTF8Encoding Objekt Dies bietet eine Unicode-Byte-Reihenfolge Mark (BOM). Um eine UTF8-Codierung zu instanziieren, die keine Stückliste bereitstellt, rufen Sie eine beliebige Überladung des UTF8Encoding-Konstruktors auf.

1) In Ihrem Beispiel gibt es keine Stückliste (https://en.wikipedia.org/wiki/Byte_order_mark).

2) 200 - ein führendes Byte. Ihm müssen genügend Fortsetzungsbytes folgen