2011-10-23 9 views
12

他の多くの記事を見てきましたが(下記参照)、この質問に対する明確な答えはまだありません。ウィンドウwchar_tは基本的な多言語面の外でユニコード文字をどのように扱いますか?ウィンドウwchar_tは基本的な多言語面の外でユニコード文字をどのように扱いますか?

ある:

Windowsでは、(U + 2008A)Han Characterのようなコードを作成するときにWindowsは何をしますか?

+1

Windowsは、UCS2をエンコーディングとして使用します。 –

+1

それも私が思ったことです。しかし、(U + 1D565)MATHEMATICAL DOUBLE-STRUCK SMALL Tを含むように私のWindowsコンピュータ上のファイル名を編集しました(http://programmers.stackexchange.com/questions/102205/should-utf-16-be参照)。 - 有害とみなされる)。したがって、たとえWindowsがUCS-2を使用していても、ファイル名にSMP文字を入れることができます。だからそれはどうやって? – vy32

+1

[Wikipedia](http://en.wikipedia.org/wiki/NTFS#Internals)によると、「NTFSでは、名前のエンコーディング(ファイル名、ストリーム名、インデックス名など)に16ビット値の任意のシーケンスを使用できます。これはUTF-16コードポイントがサポートされていることを意味しますが、ファイルシステムはシーケンスが有効なUTF-16(Unicode標準のものに限らず、任意の短い値のシーケンスを許可しているかどうか)をチェックしません。 –

答えて

16

Windows stdlibでの実装は、UTF-16ではなく、約16ビットのコード単位しか認識していません。

したがって、UTF-16サロゲートシーケンスを文字列に入れることができます。上位レベルの処理を使用して、その文字を1文字として扱うことができます。文字列の実装はあなたを助けるために何もしませんし、あなたを妨げることもありません。 UTF-16として解釈されたときに無効になるコード単位であっても、文字列にコード単位のシーケンスを含めることができます。

Windowsの上位レベルの機能の多くは、UTF-16サロゲートから作成された文字をサポートしています。そのため、ファイル.txtを呼び出して、正しくレンダリングして正しく編集できる(1つのキー複雑なテキストレイアウト(通常はWindowsのUniscribeライブラリを使用します)をサポートするエクスプローラのようなプログラムで、文字の前を移動します。

しかし、このような事実として、あなたはを通して輝くUTF-16-遺却を見ることができる場所、あなたがファイルを作成することができますが、まだ存在する場合、非感受性がそうでなければ、それを許可しません.txt、同じフォルダ内に.txtと呼ばれる、またはプログラムによって[U+DC01][U+D801].txtを作成できるという事実です。

これは、WindowsがUTF-16文字列をサポートしているのかUCS-2だけをサポートしているのかについて、素朴で基本的に無意味な引数を与える方法です。

+2

+1 "サポート"。最初にあなたの命名法を定義して、次に議論してください。 :) –

+0

これらの '.txt'-sはChromeで私にとってはすべて同じですか(「?」)。 ;) – mlvljr

7

WindowsはUCS-2を使用していましたが、Windows 2000ではUTF-16を採用していました。Windowsのwchar_t APIは現在、UTF-16を生成し、使用しています。

すべてのサードパーティ製プログラムがこれを正しく処理するわけではないため、BMP以外のデータでバグが発生する可能性があります。

また、可変長エンコードであるUTF-16は、wchar_tで使用されるエンコーディングのCまたはC++要件に準拠していないことに注意してください。これは、wctombなどの単一のwchar_tを取り、WindowsではBMP以外の文字を処理できない標準関数や、単一の文字を扱うために幅の広い型を使用するいくつかの追加関数を定義するWindowsなどのいくつかの問題を引き起こしますBMPの外側にある。私はそれが何だったのか忘れてしまいましたが、wchar_tの代わりにintを返すWindows関数を実行しました(そして、EOFが可能な結果ではありませんでした)。

関連する問題