質問

さまざまな言語のUnicodeサポートに関する情報をプールするための標準的な場所が欲しいです。それはコア言語の一部ですか?ライブラリで提供されていますか?まったく利用できませんか?言語のUnicode情報に関する一般的なリソースはありますか?回答ごとに1つの言語を入力してください。また、言語を見出しにすると、見つけやすくなります。

正しい解決策はありません

他のヒント

Perl

Perlには、ほとんどの場合、Unicodeサポートが組み込まれています。並べ替え。 perldocから:

  • perlunitut -PerlでUnicodeを使用するためのチュートリアル。 Unicodeの範囲内ですべきこととすべきでないことについて、絶対的な用語で大まかに教えます。基本をカバーしています。
  • perlunifaq -PerlのUnicodeに関するよくある質問。
  • perluniintro -PerlでのUnicodeの紹介。より少ない「説教」 perlunitut より。
  • perlunicode -ユニコードとPerlについて知っておくべきすべてのことを絶対に知る必要がある場合。

Python 3k

Python 3k(または3.0または3000)には、テキスト(ユニコード)とデータを処理するための新しいアプローチがあります:
テキスト対Unicode Vの代わりのデータ。 8ビット Unicode HOWTO も参照してください。

Java

.NETと同様に、Javaは内部でUTF-16を使用します: java.lang.String

  

A String はUTF-16形式の文字列を表し、補助文字サロゲートペアで表されます(セクション のUnicode文字表現詳細については、Character クラスをご覧ください)。インデックス値は char コード単位を参照するため、補助文字は String の2つの位置を使用します。

HQ9 +

Qコマンドは、ほとんどの実装でUnicodeを完全にサポートしています。

Delphi

Delphi 2009はUnicodeを完全にサポートしています。彼らは string の実装をデフォルトの16ビットUnicodeエンコーディングに変更し、サードパーティのものを含むほとんどのライブラリはUnicodeをサポートしています。 Marco Cantùの DelphiおよびUnicode を参照してください。

Delphi 2009より前では、Unicodeのサポートは制限されていましたが、16ビットのエンコードされた文字列を保存するための WideChar および WideString がありました。詳細については、 DelphiのUnicode を参照してください。

注:Unicodeを使用しなくても、バイリンガルCJKVアプリケーションを開発できます。たとえば、 Shift JIS エンコードされた日本語の文字列は、プレーンな AnsiStringを使用して保存できます。

移動

Googleの Goプログラミング言語はUnicodeをサポートし、UTF-8で動作します。

Python

Python 2には、クラス str および unicode があります。 str オブジェクトはバイトを保存し、 unicode オブジェクトはUTF-16文字を保存します。ほとんどのライブラリ関数は両方をサポートします(たとえば、 os.listdir( '。') str os.listdir(u '。') unicode オブジェクトのリストを返します)。どちらにも encode および decode メソッドがあります。

Python 3は基本的に unicode str に名前変更しました。 str と同等のPython 3は、 bytes 型になります。 bytes には decode メソッドと str encode メソッドがあります。 Python 3.3以降 str オブジェクトは内部的に1つを使用しますメモリを節約するために、いくつかのエンコーディングを使用します。 Pythonプログラマーにとっては、依然として抽象Unicodeシーケンスのように見えます。

Pythonのサポート:

  • エンコード/デコード
  • 正規化
  • 単純な大文字小文字の変換と空白での分割
  • キャラクターを名前で検索する

Pythonは以下をサポートしていない/サポートが制限されています

  • 照合(制限付き)
  • 大文字と小文字の間に1対1のマッピングがない特殊なケースの変換
  • 正規表現(機能している
  • テキストセグメンテーション
  • 双方向テキスト処理

参照: Unicodeに関する真実Pythonで

JavaScript

JS 1.3以前はUnicodeがサポートされていなかったようです。 1.5以降、UTF-8、UTF-16、UCS-2がすべてサポートされます。文字列、正規表現、および識別子でUnicodeエスケープシーケンスを使用できます。 ソース

.NET(C#、VB.NET、...)

.NETは、文字列を内部的にシーケンスとして保存します System.Char オブジェクト。 1つの System.Char はUTF-16 コードユニットを表します。

System.Char のMSDNドキュメントから:

  

.NET Frameworkは Char を使用します   Unicodeを表す構造   キャラクター。 Unicode標準   各Unicode文字を識別する   と呼ばれる一意の21ビットスカラー番号   コードポイント、およびUTF-16を定義   方法を指定するエンコード形式   コードポイントはシーケンスにエンコードされます   1つ以上の16ビット値。各   16ビット値の範囲は16進数から   0x0000〜0xFFFFに格納されます    Char 構造。

追加のリソース:

Tcl

Tcl文字列は、 Tcl 8.1 (1999年以来、Unicode文字のシーケンスです。 )。内部的には、UTF-8の間で動的にモーフィングされます(厳密に同じ修正UTF-8 U + 00000 文字の処理によるJava およびUCS-2(もちろんホストエンディアンとBOMで)。 OSとの通信に使用されるものを含むすべての外部文字列(1つの例外を除く)は、ホストに必要なエンコードに変換される前に内部的にUnicodeです(または通信チャネルで手動で構成されます)。例外は、データが 2つの通信チャネル間でコピーされる場合です。直接的なコピーフリーのバイナリ転送が使用される一般的なエンコード(およびここでは密接な関係のない他のいくつかの制限)を使用します。

BMPの外側の文字は現在、内部でも外部でも処理されません。これは既知の問題です。

R6RSスキーム

Unicode 5.1の実装が必要です。すべての文字列は「ユニコード形式」です。

Rustの文字列( std :: String および& str )は常に有効なUTF-8であり、nullターミネーターを使用しないため、結果としてC / C ++などのように配列としてインデックス付けされます。1.20以降は .get を使用してGoのようにスライスできますが、中央をスライスしようとすると失敗しますコードポイント。

Rustには、ホストOSと対話するための OsStr / OsString もあります。これは、Unix上のバイト配列です(バイトのシーケンスを含む)。 Windowsでは、WTF-8(WindowsおよびJavascriptで許可されている不適切に形成されたUnicode文字列を処理するUTF-8のスーパーセット)、& str および String OsStr または OsString に自由に変換できますが、逆の方法でチェックする必要があります。無効なユニコードで失敗するか、Unicode置換文字で置き換えることによって。 ( Path / PathBuf もあります。これは、 OsStr / OsString の単なるラッパーです)。

CStr 型と CString 型もあります。これらは、Unicodeの OsStr のように、任意のバイトを含むことができるヌル終端C文字列を表します。

RustはUTF-16を直接サポートしていません。ただし、Windowsでは OsStr をUCS-2に変換できます。

Common Lisp(SBCLおよびCLisp)

これ SBCL および CLisp はUnicodeをサポートしています。

Objective-C

C文字列ライブラリの一部として利用できるものは別として、ビルトインなし。

ただし、フレームワークを追加したら…

Foundation(Cocoa and Cocoa Touch)およびCore Foundation

NSStringおよびCFStringは、それぞれ完全にUnicodeベースの文字列クラスを実装します(実際には、実装の詳細としていくつかのクラス)。この2つは、“フリーブリッジされています”そのため、一方のAPIを他方のAPIで使用でき、その逆も可能です。

必ずしもテキストを表すとは限らないデータには、NSDataとCFDataがあります。 NSStringはメソッドを提供し、CFStringはテキストをデータにエンコードし、データからテキストをデコードする関数を提供します。 Core Foundationは、すべての形式のUTFを含む100種類以上のエンコーディングをサポートしています。エンコーディングは2つのグループに分けられます:組み込みエンコーディング(どこでもサポートされています)、および外部エンコーディング。少なくともMac OS Xでサポートされています。

NSStringは、フォームD、KD、C、またはKCに正規化するためのメソッドを提供します。それぞれが新しい文字列を返します。

NSStringとCFStringはどちらも、さまざまな比較/照合オプションを提供します。 Foundationの比較オプションフラグおよび Core Foundationの比較オプションフラグ。それらはすべて同義語ではありません。たとえば、Core Foundationはリテラル(厳密なコードポイントベース)比較をデフォルトにしますが、Foundationは非リテラル比較(アクセント付き文字の比較を同等にする)をデフォルトにします。

Core FoundationはObjective-Cを必要としないことに注意してください。実際、Foundationのほとんどの機能をストレートCまたはC ++を使用したCarbonプログラマーに提供するために作成されました。ただし、最近のほとんどの使用方法は、CocoaまたはCocoa Touchプログラムであると思われます。これらはすべてObjective-CまたはObjective-C ++で記述されています。

C / C ++

C

C99より前の

Cには、Unicodeサポートが組み込まれていません。文字列としてゼロで終了する文字配列( char * または char [] )を使用します。 char は、バイト(8ビット)で指定されます。

C99は、古い str -関数に加えて、 wcs -関数を指定します(例: strlen -> wcslen )。これらの関数は、 char * ではなく wchar_t * を取ります。 wchar_t はワイド文字タイプを表します。 wchar_t のサイズはコンパイラ固有であり、8ビットまで小さくすることができます。コンパイラごとにサイズが異なりますが、通常は16ビット(UTF-16)または32ビット(UTF-32)です。

ほとんどのCライブラリ関数はUTF-8に対して透過的です。例えば。オペレーティングシステムがUTF-8をサポートしている場合(およびシステムの文字セットとしてUTF-8が設定されている場合)、UTF-8エンコード文字列を渡す fopen を使用してファイルを作成すると、適切な名前のファイルが作成されます。

C ++

C ++の状況は非常に似ています( std :: string -&gt; std :: wstring )が、少なくとも何らかの< href = "http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3572.html" rel = "nofollow noreferrer">標準ライブラリでのUnicodeサポート。

D

Dは、UTF-8、UTF-16、およびUTF-32(それぞれ、char、wchar、およびdchar)をサポートします。すべてのタイプの表は、こちらにあります。

PHP

SOでこれにスレッド全体が既にあります!

ルビー

Rubyで見つけることができる唯一のものはかなり古く、あまりルビストではないので、どれほど正確かはわかりません。

  

レコードでは、Rubyはutf8をサポートしていますが、マルチバイトはサポートしていません。内部的には、通常は文字列がバイトベクトルであると想定していますが、通常は動作させるために使用できるライブラリとトリックがあります。

こちら

Ruby 1.9

Ruby 1.9は文字列にエンコーディングを付加します。バイナリ文字列は、エンコード「ASCII-8BIT」を使用します。通常、最新のシステムではデフォルトのエンコーディングはUTF-8ですが、すべてのサードパーティライブラリ関数がこのエンコーディングで常に文字列を返すとは限りません。他のエンコーディングを返す場合があります(たとえば、一部のyamlパーサーは状況によってそれを行います)。異なるエンコーディングの2つの文字列を連結すると、可能性があります Encoding :: CompatibilityError が発生します。

アーク

ArcはUnicodeをサポートしていません。 まだ

Lua

Lua 5.3には、UTF-8エンコーディングを処理する組み込みの utf8 ライブラリがあります。これにより、一連のコードポイントを対応するバイトシーケンスに変換したり、その逆を行ったり、長さ(文字列内のコードポイントの数)を取得したり、文字列内のコードポイントを反復処理したり、のバイト位置を取得したりできますn 番目のコードポイント。また、 string ライブラリのパターンマッチング関数で使用される、UTF-8バイトシーケンスに一致するパターンも提供します。

Lua 5.3には、文字列リテラルで使用できるUnicodeコードポイントエスケープシーケンスがあります(たとえば、&quot; a&quot; の場合は&quot; \ u {61}&quot; )。 UTF-8バイトシーケンスに変換されます。

Luaソースコードは、UTF-8またはASCII文字が1バイトを占める任意のエンコーディングでエンコードできます。 UTF-16およびUTF-32は、バニラLuaインタープリターによって理解されません。ただし、文字列には任意のエンコーディングまたは任意のバイナリデータを含めることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top