Wie werden die Unicode-Zeichenfolgen in C # am besten gehandhabt? [geschlossen]

7

Kann mir bitte jemand einige wichtige Aspekte mitteilen, die mir beim Umgang mit Unicode-Strings in C # wichtig sein sollten?

    
Vijesh VP 27.09.2008, 20:28
quelle

7 Antworten

11

Beachten Sie, dass C # -Strings Sequences von Char-, UTF-16-Code-Einheiten sind. Sie sind nicht Unicode-Codepunkte. Einige Unicode-Codepunkte erfordern zwei Zeichen, und Sie sollten keine Strings zwischen diesen Zeichen teilen.

Außerdem können sich Unicode-Codepunkte zu einem einzigen "Zeichen" zusammenfassen - zum Beispiel ein "u" Char gefolgt von Umlat Char. Sie können also keine Strings zwischen beliebigen Codepunkten aufteilen.

Im Grunde sind es Probleme, bei denen ein bestimmtes Problem nur in der Praxis auf Sprachen wirkt, die Sie nicht kennen.

    
Aaron 27.09.2008 21:53
quelle
7

C # (und .Net im Allgemeinen) behandeln Unicode-Zeichenfolgen transparent, und Sie müssen nichts Spezielles tun, es sei denn, Ihre Anwendung muss Dateien mit bestimmten Codierungen lesen / schreiben. In diesen Fällen können Sie verwaltete Zeichenfolgen in Byte-Arrays der gewünschten Codierung konvertieren, indem Sie die Klassen im System.Text.Encodings-Namespace verwenden.

    
C. Lawrence Wenham 27.09.2008 20:33
quelle
2

System.String wurde bereits intern mit Unicode behandelt, so dass Sie dort behandelt werden. Es empfiehlt sich, System.Text.Encoding.UTF8Encoding beim Lesen und Schreiben von Dateien zu verwenden. Es ist mehr als nur das Lesen / Schreiben von Dateien. Alles, was Daten aus dem Netzwerk streamt, einschließlich Netzwerkverbindungen, hängt von der Codierung ab. Wenn Sie WCF verwenden, wird für die meisten Bindungen standardmäßig UTF8 verwendet (tatsächlich erlauben die meisten überhaupt kein ASCII).

UTF8 ist eine gute Wahl, da es zwar den gesamten Unicode-Zeichensatz unterstützt, für den Großteil des ASCII-Zeichensatzes jedoch eine Byte-Ähnlichkeit aufweist. Daher haben naive Anwendungen, die Unicode nicht unterstützen, eine gewisse Chance, Ihre Anwendungsdaten zu lesen / schreiben. Diese Anwendungen werden erst dann fehlschlagen, wenn Sie erweiterte Zeichen verwenden.

System.Text.Encoding.Unicode schreibt UTF-16, das mindestens zwei Bytes pro Zeichen enthält, wodurch es sowohl größer als auch vollständig inkompatibel mit ASCII ist. Und System.Text.Encoding.UTF32, wie Sie erraten können, ist noch größer. Ich bin mir nicht sicher, ob UTF-16 und 32 tatsächlich verwendet werden, aber vielleicht sind sie besser, wenn Sie viele erweiterte Zeichen haben. Das ist nur eine Theorie, aber wenn es wahr ist, dann könnten japanische / chinesische Entwickler, die ein Produkt machen, das hauptsächlich in diesen Sprachen verwendet wird, UTF-16/32 als bessere Wahl empfinden.

    
nedruod 29.09.2008 06:49
quelle
1

Denken Sie nur an die Codierung beim Lesen und Schreiben von Streams. Verwenden Sie TextReader und TextWriter, um Text in verschiedenen Kodierungen zu lesen und zu schreiben. Verwenden Sie immer utf-8, wenn Sie eine Wahl haben.

Lassen Sie sich nicht von Sprachen und Kulturen verwirren - das ist ein völlig anderes Thema als Unicode.

    
JacquesB 27.09.2008 20:33
quelle
0

.Net hat relativ gute i18n-Unterstützung. Sie müssen nicht wirklich über Unicode nachdenken, so wie alle .NET-Strings und integrierten String-Funktionen mit Unicode das Richtige tun. Es ist nur zu beachten, dass die meisten der String-Funktionen, z. B. DateTime.ToString (), standardmäßig die Kultur des Threads verwenden, die standardmäßig die Windows-Kultur ist. Sie können eine andere Kultur für die Formatierung entweder im aktuellen Thread oder bei jedem Methodenaufruf angeben.

Das einzige Mal, wenn Unicode ein Problem darstellt, ist das Codieren / Decodieren von Strings in und aus Bytes.

    
Matt Howells 27.09.2008 20:34
quelle
0

Wie bereits erwähnt, behandeln .NET-Zeichenfolgen Unicode transparent. Neben Datei-I / O würde die andere Betrachtung auf der Datenbank-Ebene sein. SQL Server unterscheidet zum Beispiel zwischen VARCHAR (nicht Unicode) und NVARCHAR (die Unicode behandelt). Beachten Sie auch die gespeicherten Prozedurparameter.

    
Pat 28.09.2008 16:26
quelle
0

Weitere Details finden Sie in diesem Thread:

Ссылка

    
pradeeptp 09.02.2009 04:58
quelle

Tags und Links