2012-04-27 5 views

答えて

5

System.Stringは、内部的にUTF-16を使用することdocumentedです。

4

それは(あなたは物事がChars represent UTF-16 code unitsため、複雑になり、その場合にはBasic Multilingual Planeを残していない限り)あなたを心配する必要はありません実装の詳細です。

それが関連するとなった場合、文字列をバイト配列に変換する場合、すなわち、あなたはエンコーディングを使用するようにを選択する必要があります。

Dim S1 As String = ... 

Dim utf8Bytes = Encoding.UTF8.GetBytes(S1) 
Dim utf16Bytes = Encoding.Unicode.GetBytes(S1) 

Dim western As New Encoding(1252) 
Dim westernBytes = western.GetBytes(S1) 
+0

これはそれよりも早く関連する方法になります。文字列内のBMPの外側にある文字を突き刺し、文字列から文字を取り出すことでそれを取り除くことを試みます。 .NETのUTF-16は全面的に漏れています。特にSystem.Charは16ビット幅であるため、すべての文字(コード*単位*ではなくコード*のポイント*を表す)を保持できません。これは内部的なエンコーディングがさまざまなことができるPythonとは対照的ですが、Unicode文字列の使用に気付かれないことが保証されています。 .NETでは、BMPを終了するとすぐに気付くでしょう。 – Joey

+0

@Joey: "BMP"とは何ですか? – Heinzi

+0

基本多言語面。私。最初の65536個のUnicodeコードポイントで、それぞれの文字を1つのUTF-16コード単位で扱うことができます。 – Joey

関連する問題