Ich habe einige Antworten auf diesen Beitrag gesehen und es ist möglich, als abgeschlossenes Basiswissen zu gelten, da ich mehrere Ansätze in der C#-Programmierung habe, um das gleiche Problem zu lösen. Die einzige Sache, die notwendig ist, zu berücksichtigen ist über einen Unterschied zwischen reines UTF-8 y UTF-8 mit einem STÜCKLISTE .
Letzte Woche musste ich bei meiner Arbeit eine Funktion entwickeln, die CSV-Dateien mit einer Stückliste und andere CSV-Dateien mit reinem UTF-8 (ohne Stückliste) ausgibt. Jede CSV-Datei Kodierung Typ wird von verschiedenen nicht standardisierten APIs verwendet. Eine API liest UTF-8 mit einem BOM und die andere API liest ohne BOM. Ich musste in den Referenzen zu diesem Konzept recherchieren und las die " Was ist der Unterschied zwischen UTF-8 und UTF-8 ohne BOM? " Stack Overflow-Frage und der Wikipedia-Artikel _" Byte-Order-Marke "_ um meinen Ansatz zu entwickeln.
Schließlich musste meine C#-Programmierung für beide UTF-8-Kodierungstypen (mit BOM und rein) ähnlich wie dieses Beispiel unten sein:
// For UTF-8 with BOM, equals shared by Zanoni (at top)
string result = System.Text.Encoding.UTF8.GetString(byteArray);
//for Pure UTF-8 (without B.O.M.)
string result = (new UTF8Encoding(false)).GetString(byteArray);
7 Stimmen
"sollte nur eine Zuweisung und eine Speicherkopie sein": ist nicht korrekt, da eine .NET-Zeichenkette UTF-16 kodiert ist. Ein Unicode-Zeichen kann eine UTF-8-Code-Einheit oder eine UTF-16-Code-Einheit sein. Ein anderes kann zwei UTF-8-Code-Einheiten oder eine UTF-16-Code-Einheit sein, ein anderes kann drei UTF-8-Code-Einheiten oder eine UTF-16-Code-Einheit sein, ein anderes kann vier UTF-8-Code-Einheiten oder zwei UTF-16-Code-Einheiten sein. Eine Memkopie könnte zwar erweitert werden, aber sie wäre nicht in der Lage, die Konvertierung von UTF-8 nach UTF-16 zu bewältigen.