33

私はこのマルチバイト文字をほとんどすべて無視することができましたが、今は UI 作業を行う必要があり、この分野での私の無知が私に追いつくことを知っています! アプリケーションをローカライズするために知っておくべきことを、数段落以内で説明してくれる人はいますか? どのタイプを使用する必要がありますか (.Net と C/C++ の両方を使用しており、Unix と Windows の両方でこの回答が必要です)。

4

5 に答える 5

25

文字エンコーディングは、それぞれが特定の文字セットからシンボルを検索する一連のコードで構成されます。ウィキペディアの文字エンコーディングに関するこの優れた記事を参照してください。

UTF8 (UCS)は、各シンボルに 1 ~ 4 バイトを使用します。 ウィキペディアは、マルチバイトのランダウンがどのように機能するかについての良い要約を提供します:

  • 1 バイト文字の最上位ビットは常に 0 です。
  • マルチバイト シーケンスの最初のバイトの最上位ビットによって、シーケンスの長さが決まります。これらの最上位ビットは、2 バイト シーケンスの場合は 110 です。3 バイト シーケンスの場合は 1110 など。
  • マルチバイト シーケンスの残りのバイトは、2 つの最上位ビットとして 10 を持ちます。
  • UTF-8 ストリームには、バイト FE も FF も含まれていません。これにより、UTF-8 ストリームが U+FEFF (バイトオーダーマーク) で始まる UTF-16 ストリームのように見えなくなります。

このページには、各文字エンコーディング タイプの長所と短所の優れた比較も示されています。

UTF16 (UCS2)

各シンボルに 2 バイトから 4 バイトを使用します。

UTF32 (UCS4)

シンボルごとに常に 4 バイトを使用します。

charはデータのバイトを意味するだけで、実際のエンコーディングではありません。UTF8/UTF16/ascii とは異なります。char* ポインタは、あらゆるタイプのデータとあらゆるエンコーディングを参照できます。

STL:

stl の std::wstring と std::string はどちらも、UTF-8 や UTF-16 などの可変長文字エンコーディング用に設計されていません。

実装方法:

iconv ライブラリを見てください。 iconvはlibxml (Gnome の XML C パーサー)などのプロジェクトで使用される強力な文字エンコーディング変換ライブラリです。

文字エンコーディングに関するその他の優れたリソース:

于 2008-10-05T15:28:22.680 に答える
12

受け取った知識は、Spolskyの記事がいくつかの重要な点を見逃していることを示唆しています。

この記事はより完全なものとして推奨されています: Unicode®標準:技術的な紹介

この記事も良い紹介です:Unicodeの基本

特に後者は、Unicodeの文字エンコード形式とスキームの概要を示しています。

于 2008-10-05T17:07:51.513 に答える
4

さまざまな UTF 標準は、「コード ポイント」をエンコードする方法です。コードポイントは、Unicode 文字セットへのインデックスです。

もう 1 つのエンコーディングは UCS2 で、これは常に 16 ビットであるため、完全な Unicode 範囲をサポートしていません。

また、1 つのコードポイントが 1 つの文字に等しくないことも知っておくとよいでしょう。たとえば、å などの文字は、1 つのコード ポイントとして、または 1 つは a 用でもう 1 つはリング用の 2 つのコード ポイントとして表すことができます。

したがって、2 つの Unicode 文字列を比較するには、比較する前に正規表現を取得するために正規化が必要です。

于 2008-10-05T15:47:39.740 に答える
1

フォントの問題もあります。フォントを処理するには 2 つの方法があります。必要なすべての Unicode 文字にグリフを含む巨大なフォントを使用するかのいずれかです (最近のバージョンの Windows には、そのようなフォントが 1 つまたは 2 つ付属していると思います)。または、Unicode 標準のサブセット専用のさまざまなフォントのグリフを組み合わせることができる som ライブラリを使用します。

于 2008-10-05T15:50:45.553 に答える