2009-07-12 7 views
13

現在、Digital Mars D言語の仕様を検討していますが、プリミティブ文字の種類の完全な性質を理解するのに少し問題があります。本のLearn to Tango With Dは、この分野の言語の機能と制限についても同様に曖昧です。我々は(UTF)のUnicode変換のほとんどのフォーマットのエンコーディングは、可変ビット幅で文字を表現することを知っているので、これはDでその文字を意味し、Dのプリミティブ文字の種類にはどのような制限がありますか?

 
char; // unsinged 8 bit UTF-8 
wchar; // unsigned 16 bit UTF-16 
dchar; // unsigned 32 bit UTF-32 

種類は、次のようにthe websiteに与えられています8ビットに収まる値のみを含めることができますか、それとも2バイト文字を与えるときにマシンの物理メモリに展開されますか?変数に過負荷を掛けたときに次に適切な型への自動キャスティングのような他の可能性がありますか?

たとえば、UTF-8 charをエディタで使用し、中国語を入力したいとします。 C#のように、単にUnicode文字を「正しく」扱うことができますか? Unicodeでサポートされている言語で作業できるようにグルーコードを提供する必要があるでしょうか?

これらのタイプがどのように機能するかについての具体的な情報と、その制限事項に関する一般的なベストプラクティスのアドバイスをお待ちしております。

+0

をキープ" - >あなたはutf8を意味しますか? – elcuco

+0

はい、私はUFTエンコーディングを意味します。混乱させて申し訳ありません。 – IanGilham

答えて

15

単一charまたはwcharは、UTF code unitを表します。つまり、charは、ASCIIシンボル(0-127)を表すか、またはUnicode文字(code point)を表すUTF-8シーケンスの一部であることができます。 Unicodeには65536を超えるコードポイントが存在するため、dcharタイプのみがUnicode文字全体を表すことができます。

文字列型(string,wstringおよびdstring)は、その内容をそれぞれのUTF表現に自動的に変換しません。これを行うには、toUTF8,toUTF16およびtoUTF32std.utf(またはtoString/toString16/toString32からtango.text.convert.Utfにする場合は、Tangoを使用する場合)を使用する必要があります。

ユーザーは、各文字を1つのコード単位にマップできる最もメモリ効率の良い表現を自動的に使用する文字列クラスを実装しました。これにより、メモリのオーバーヘッドを最小限に抑えながら、素早くスライスしてインデックスを作成できます。そのような実装の1つは、Christopher E. Millerのmtextです。

さらに読書:

  • D
  • Text in D上のWikipediaのエントリでString handling節、ダニエルによって我々はUnicode標準は、可変ビット幅の文字を表していることを知っているので」
+2

私の問題は、コードユニットとコードポイントの違いを理解していたようです。最後のリンクはすべてのことをきちんと説明しています。ありがとう。 – IanGilham

+0

Keepさんの執筆のための補足事項です。 – BCS

+1

この記事があなたを助けてくれたことをうれしく思います。それでも、私がここに来る前にこれに答えるためにCyber​​Shadowがあなたを呪う! :P –

関連する問題