web-dev-qa-db-ja.com

主にアラビア語のテキストを含むWebページにはどの文字エンコードを使用する必要がありますか? utf-8は大丈夫ですか?

主にアラビア語のテキストを含むWebページにはどの文字エンコードを使用する必要がありますか?

Utf-8は大丈夫ですか?

15
Paul D. Waite

UTF-8はUnicodeの全範囲を格納できるため、アラビア語に使用しても問題ありません。


ただし、どのエンコーディングが最も効率的か疑問に思っている場合は、次のようにします。

すべてのアラビア文字は、単一のUTF-16コードユニット(2バイト)を使用してエンコードできますが、2つまたは3つのUTF-8コードユニット(それぞれ1バイト)を使用する可能性があるため、アラビア文字をエンコードするだけの場合、UTF-16はよりスペース効率の高いオプションになります。

ただし、アラビア語をエンコードしているだけではありません。UTF-8では1バイトに格納できるかなりの数の文字をエンコードしていますが、UTF-16では2バイトを使用しています。すべてのhtmlエンコーディング文字<&>=およびすべてのhtml要素名。

これはトレードオフであり、巨大なドキュメントを扱っているのでない限り、それは問題ではありません。

16
JoeG

私は主にアラビア語のWebサイトを開発しており、これらは私が使用する2つのエンコーディングです。

1. Windows-1256

これは、アラビア語のWebサイトで使用される最も一般的なエンコーディングです。ほとんどの場合(90%)、アラビア語のユーザーに対して機能します。

これが最大のアラビア語Web開発フォーラムの1つです: http://traidnt.net/vb/ 。彼らがこのエンコーディングを使用していることがわかります。

このエンコーディングの問題は、国際的に使用するWebサイトを開発している場合、このエンコーディングがすべてのユーザーで機能するとは限らず、コンテンツではなく意味不明なものが表示されることです。

2. UTF-8

このエンコーディングは前の問題を解決し、URLでも機能します。つまり、URLにアラビア語を含めたい場合は、それらをutf-8にする必要があります。そうしないと、機能しません。

このエンコーディングの欠点は、このエンコーディングを使用してアラビア語のコンテンツをデータベース(MySqlなど)に保存する場合(データベースもutf-8でエンコードされるため)、サイズが2倍になることです。それがwindows-1256でエンコードされている場合(したがって、データベースはlatin-1でエンコードされます)。

サイズを大きくする余裕があれば、utf-8を使用することをお勧めします。

10
Maher4Ever

はい、UTF-8は問題ありません。 Unicode標準の任意のコードポイントをエンコードできます。


追加するために編集

答えをより完全にするために、現実的な選択は次のとおりです。

  • UTF-8
  • UTF-16
  • UTF-32

それぞれにトレードオフと利点があります。

UTF-8

Joe Gauterin が指摘しているように、UTF-8はヨーロッパのテキストには非常に効率的ですが、ラテンアルファベットから「遠く」に行くとますます非効率になる可能性があります。テキストがすべてアラビア語の場合、実際にはUTF-16の同等のテキストよりも大きくなります。これが問題になることはめったにありませんが、実際には、安価で豊富なRAM)は、処理するテキストがたくさんない限りです。さらに問題となるのは、エンコードすると、一部の文字列操作が困難で遅くなります。たとえば、文字列の5番目のアラビア文字は1バイトの長さ(句読点など)である場合と、2文字または3文字である場合があるため、簡単に取得できません。 処理文字列の処理が遅く、エラーが発生しやすい。

一方、ヨーロッパとアラビア語が混在するテキストを大量に作成する場合は、UTF-8が最適な選択肢となる可能性があります。ドキュメント内のヨーロッパのテキストが多いほど、UTF-8の選択は適切になります。

UTF-16

主にアラビア語のテキストを使用している場合、UTF-16はUTF-8よりも優れたスペース効率を提供します。ただし、アラビア語のコードポイントについてはわかりません。したがって、ここで可変長エンコーディングを使用するリスクがあるかどうかはわかりません。 (ただし、これは問題ではないと思います。)実際に可変長エンコーディングを使用している場合は、UTF-8のすべての文字列処理の問題がここでも当てはまります。そうでない場合は、問題ありません。

一方、ヨーロッパとアラビア語のテキストが混在している場合、UTF-16はスペース効率が低下します。また、テキストフォームを中国語などの他のテキストに拡張していることに気付いた場合は、間違いなく可変長フォームとそれに関連する問題に戻ります。

UTF-32

UTF-32は、基本的にスペース要件を2倍にします。一方、すべての既知の(そしておそらく未知の;)スクリプトフォームに対して一定のサイズです。生の文字列処理の場合、可変長エンコーディングによって発生する問題がなく、最速で最良のオプションです。 (これは、当然、32ビット文字を知っている文字列ライブラリがあることを前提としています。)

勧告

私自身の推奨事項は、本当にを参照しない限り、ストレージや送信などの外部形式としてUTF-8を使用することです(誰もがUTF-8をサポートしているため)。 UTF-16でサイズ的にメリットがあります。したがって、外の世界から文字列を読み取るときは常にUTF-8になり、外の世界に文字列を置くときもそれはUTF-8になります。ただし、ソフトウェア内では、大量の文字列を操作する習慣がない限り(その場合は、とにかく別のデータ構造をお勧めします!)、代わりにUTF-16またはUTF-32を使用することをお勧めします(存在するかどうかによって異なります)。コードの速度効率と単純さのためのUTF-16データの可変長エンコーディングの問題)。

UTF-8は、ほとんどすべてで機能するため、最も簡単な方法です。

UTF-8は、任意のUnicode文字をエンコードできます。正しいコードページやフォントを選択しなくても、さまざまな言語のファイルを正しく表示できます。たとえば、中国語とアラビア語は、エンコーディングを切り替えるための特別なコードを挿入せずに同じテキストにすることができます。 (経由 ウィキペディア

もちろん、次の点に注意してください。

UTF-8は、多くの場合、1つまたはいくつかの言語用に作成されたエンコーディングよりも多くのスペースを必要とします。発音区別符号を含むラテン文字と他のアルファベット文字の文字は、通常、適切なマルチバイトエンコーディングでは文字ごとに1バイトかかりますが、UTF-8では2バイトかかります。東アジアのスクリプトは通常、マルチバイトエンコーディングでは1文字あたり2バイトですが、UTF-8では1文字あたり3バイトかかります。

...しかし、ほとんどの場合、それは大きな問題ではありません。巨大なドキュメントを扱い始めると1つになります。

2
marcgg

UTF-8は、多くの場合、1つまたはいくつかの言語用に作成されたエンコーディングよりも多くのスペースを必要とします。発音区別符号を含むラテン文字と他のアルファベット文字の文字は、通常、適切なマルチバイトエンコーディングでは文字ごとに1バイトかかりますが、UTF-8では2バイトかかります。東アジアのスクリプトは通常、マルチバイトエンコーディングでは1文字あたり2バイトですが、UTF-8では1文字あたり3バイトかかります。

0
user2304302