さまざまな言語でのUnicodeサポートに関する情報をプールするための標準的な場所が欲しいのですが。それはコア言語の一部ですか?図書館で提供されていますか?全然利用できませんか。ある言語でUnicode情報用のリソースの人気のあるリソースはありますか?一つの答えにつき一つの言語をお願いします。また、その言語を見出しにして、見つけやすくすることもできます。
Perlは主に組み込みのUnicodeサポートを持っています。並べ替えます。 perldocから:
Python 3k(または3.0または3000)には、テキスト(Unicode)とデータを処理するための新しいアプローチがあります。
テキスト対Unicodeの代わりにデータ対。 8ビット。また見なさいUnicode HOWTO。
.NETと同様に、Javaは内部でUTF-16を使用します。java.lang.String
A
String
UTF-16形式の文字列を表します。補助文字で表される代理ペア(セクションを見てくださいUnicode文字表現の中にCharacter
詳細についてはクラス)。インデックス値char
つまり、補助文字はコード単位内の2つの位置を使用します。String
。
Qコマンドは、ほとんどの実装で完全なUnicodeをサポートしています。
Delphi 2009はUnicodeを完全にサポートしています。彼らはの実装を変更しましたstring
デフォルトでは16ビットUnicodeエンコーディングが使用され、サードパーティのものを含むほとんどのライブラリはUnicodeをサポートしています。 MarcoCantùのを参照してください。DelphiとUnicode。
Delphi 2009以前は、Unicodeのサポートは限られていましたが、WideChar
そしてWideString
16ビットエンコード文字列を格納します。見るDelphiのUnicode詳しくは
Unicodeを使用せずに、バイリンガルCJKVアプリケーションを開発することもできます。例えば、シフトJIS日本語のエンコードされた文字列はplainを使って格納することができますAnsiString
。
.NETストアひものシーケンスとして内部的にSystem.Char
オブジェクト1System.Char
UTF-16を表しますコード単位。
上のMSDNのドキュメントからSystem.Char
:
.NET FrameworkはチャーUnicodeを表す構造 キャラクター。 Unicode規格 各Unicode文字を次のように識別します。 aと呼ばれる一意の21ビットスカラー数 コードポイント、およびUTF-16を定義 方法を指定する符号化形式 コードポイントはシーケンスにエンコードされます 1つ以上の16ビット値各 16ビット値は16進数の範囲 0x0000から0xFFFFまで あるチャー構造。
追加のリソース:
Tcl文字列はそれ以来、Unicode文字のシーケンスとなっています。Tcl 8.1(1999)。内部的には、それらはUTF-8(厳密にはJavaと同じModified UTF-8の取り扱いによるU+00000
UCS-2(ホストのエンディアンとBOM、もちろん)。 OSとの通信に使用されるものを含め、すべての外部文字列(1つの例外を除く)は内部的にUnicodeであり、ホストに必要なエンコードに変換されます(または通信チャネルで手動で設定されます)。例外はデータがある場所です。2つの通信チャネル間でコピー直接コピーフリーのバイナリ転送が使用される一般的なエンコーディング(およびここでは関係ありませんが、その他のいくつかの制限もあります)。
BMP外の文字は現在、内部的にも外部的にも処理されていません。これは既知の問題です。
R6RSスキーム
Unicode 5.1の実装が必要です。すべての文字列は「Unicode形式」です。
C99より前のCでは、Unicodeサポートは組み込まれていません。それはゼロ終端文字配列を使います(char*
またはchar[]
文字列として)。 Achar
バイト(8ビット)で指定します。
C99が指定wcs
- 古い機能に加えてstr
機能(例:strlen
- >wcslen
)これらの機能はwchar_t*
の代わりにchar*
。wchar_t
ワイド文字タイプを表します。サイズwchar_t
これはコンパイラー固有のもので、最小8ビットまで可能です。コンパイラーが異なればサイズも異なりますが、通常は16ビット(UTF-16)または32ビット(UTF-32)です。
ほとんどのCライブラリ関数はUTF-8に対して透過的です。例えば。あなたのオペレーティングシステムがUTF-8をサポートしている場合(そしてUTF-8があなたのシステムの文字セットとして設定されている場合)、次にを使ってファイルを作成するfopen
UTF-8でエンコードされた文字列を渡すと、適切な名前のファイルが作成されます。
C ++の状況はよく似ています(std::string
- >std::wstring
)、しかし少なくともある種のものを手に入れるための努力がある標準ライブラリでのUnicodeサポート。
char*
UTF-8でエンコードされた文字列 - dan04
Python 2にはクラスがありますstr
そしてunicode
。str
オブジェクトはバイトを格納します。unicode
オブジェクトはUTF-16文字を格納します。ほとんどのライブラリ関数は両方をサポートしています(例:os.listdir('.')
のリストを返すstr
、os.listdir(u'.')
のリストを返すunicode
オブジェクト)。両方持っていますencode
そしてdecode
メソッド
Python 3は基本的に改名されましたunicode
にstr
。に相当するPython 3str
型になりますbytes
。bytes
がありますdecode
そしてstr
あencode
方法。Python 3.3以降
str
オブジェクトは内部的にメモリを節約するためにいくつかのエンコーディングの一つを使います。 Pythonプログラマーにとっては、まだ抽象Unicodeシーケンスのように見えます。
Pythonは以下をサポートします。
Pythonは次のものをサポートしていません。
また見なさい:PythonでのUnicodeに関する真実
C文字列ライブラリの一部として利用可能であること以外は何も組み込まれていません。
ただし、一度フレームワークを追加すると…
NSStringとCFStringはそれぞれ完全にUnicodeベースの文字列クラスを実装しています(実装の詳細として、実際にはいくつかのクラス)。 2つは「フリーダイヤルブリッジ」であるため、一方のAPIはもう一方のインスタンスで使用でき、またその逆も可能です。
必ずしもテキストを表すとは限らないデータには、NSDataとCFDataがあります。 NSStringはメソッドを提供し、CFStringはテキストをデータにエンコードし、テキストをデータからデコードする機能を提供します。 Core Foundationは、あらゆる形式のUTFを含む、100種類以上のエンコードをサポートしています。エンコーディングは2つのグループに分けられます。組み込みエンコーディングどこでもサポートされている外部エンコーディング少なくともMac OS Xではサポートされています。
NSStringはフォームD、KD、C、またはKCに正規化するためのメソッドを提供します。それぞれ新しい文字列を返します。
NSStringとCFStringはどちらも、さまざまな比較/照合オプションを提供します。ここにあります財団の比較オプションフラグそしてCore Foundationの比較オプションフラグ。それらはすべて同義語ではありません。たとえば、Core Foundationはリテラル(厳密なコードポイントベース)比較をデフォルトにしますが、Foundationはリテラル以外の比較(アクセント記号付きの文字を比較できるようにする)をデフォルトにします。
Core FoundationはObjective-Cを必要としません。実際、Foundationのほとんどの機能をストレートCまたはC ++を使用したCarbonプログラマに提供するために作成されました。しかし、私はそれが最も現代的に使用されているのはCocoaまたはCocoa Touchプログラムであり、それらはすべてObjective-CまたはObjective-C ++で書かれていると思います。
さびのひも(std::String
そして&str
)は常に有効なUTF-8であり、ヌルターミネータを使用しない。その結果、C / C ++などにある場合と同様に、配列としてインデックスを付けることはできない。.get
1.20以降、コードポイントの中央をスライスしようとすると失敗するという警告があります。
錆もありますOsStr
/OsString
ホストOSと対話するため。 Unixのバイト配列です(任意のバイトシーケンスを含みます)。 WindowsではWTF-8(WindowsとJavascriptで許可されている不適切に形成されたUnicode文字列を処理するUTF-8のスーパーセット)、&str
そしてString
自由に変換することができますOsStr
またはOsString
しかし、他の方法で変換するためのチェックが必要です。無効なUnicodeで失敗したか、Unicodeの代替文字で置き換えられました。 (もありますPath
/PathBuf
まわりのラッパーですOsStr
/OsString
)
もありますCStr
そしてCString
Nullで終端されたC文字列を表す型OsStr
Unixでは、それらは任意のバイトを含むことができます。
RustはUTF-16を直接サポートしていません。しかし変換することができますOsStr
窓のUCS-2に。
私がRuby用に見つけることができる唯一のものはかなり古く、そしてルビストの多くではない、私はそれがどれほど正確であるかわからない。
記録として、Rubyはutf8をサポートしていますが、マルチバイトはサポートしていません。内部的には、通常は文字列がバイトベクトルであると想定していますが、物事を機能させるために通常使用できるライブラリとトリックがあります。
みつけたここに。
Ruby 1.9はエンコーディングを文字列に添付します。バイナリ文字列は "ASCII-8BIT"というエンコーディングを使います。最近のシステムではデフォルトのエンコーディングは通常UTF-8ですが、サードパーティのライブラリ関数がすべてこのエンコーディングの文字列を返すとは限りません。それは他のエンコーディングを返すかもしれません(例えば、いくつかのyamlパーサはいくつかの状況でそれを行います)。異なるエンコーディングの2つの文字列を連結すると、たぶん得るEncoding::CompatibilityError
。
ArcはUnicodeをサポートしていません。まだ。
Lua 5.3にはビルトインがありますutf8
UTF-8エンコーディングを処理するライブラリ。これにより、一連のコードポイントを対応するバイトシーケンスに変換したり、その逆に変換したり、長さ(文字列内のコードポイント数)を取得したり、文字列内のコードポイントを反復処理したりします。n番目のコードポイント。また、パターンを提供します。これは、パターンマッチング関数によって使用されます。string
これは1つのUTF-8バイトシーケンスと一致します。
Lua 5.3には、文字列リテラルで使用できるUnicodeコードポイントエスケープシーケンスがあります(例えば、"\u{61}"
にとって"a"
)それらはUTF-8バイトシーケンスに変換されます。
Luaのソースコードは、UTF-8またはASCII文字が1バイトを占める任意のエンコーディングでエンコードできます。 UTF-16とUTF-32は、バニラルアのインタプリタには理解されません。ただし、文字列には任意のエンコード、または任意のバイナリデータを含めることができます。