私は文字列に関する簡単な質問があります。次のコードを検討してください:VB.NETの文字列のデフォルトのエンコーディングは何ですか?
Dim S1 as String = "abc"
S1のエンコードとは何ですか?それはUTF-8か、ユーザーウィンドウのローカル設定に依存しますか?
私は文字列に関する簡単な質問があります。次のコードを検討してください:VB.NETの文字列のデフォルトのエンコーディングは何ですか?
Dim S1 as String = "abc"
S1のエンコードとは何ですか?それはUTF-8か、ユーザーウィンドウのローカル設定に依存しますか?
System.String
は、内部的にUTF-16を使用することdocumentedです。
それは(あなたは物事がChar
s 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)
これはそれよりも早く関連する方法になります。文字列内のBMPの外側にある文字を突き刺し、文字列から文字を取り出すことでそれを取り除くことを試みます。 .NETのUTF-16は全面的に漏れています。特にSystem.Charは16ビット幅であるため、すべての文字(コード*単位*ではなくコード*のポイント*を表す)を保持できません。これは内部的なエンコーディングがさまざまなことができるPythonとは対照的ですが、Unicode文字列の使用に気付かれないことが保証されています。 .NETでは、BMPを終了するとすぐに気付くでしょう。 – Joey
@Joey: "BMP"とは何ですか? – Heinzi
基本多言語面。私。最初の65536個のUnicodeコードポイントで、それぞれの文字を1つのUTF-16コード単位で扱うことができます。 – Joey