2011-01-15 6 views
7

最近、WebがUTF-8向けに標準化されていて、UTF-8を使うのが悪いと思っていただけです。私は、UTF-8,16などがより多くのスペースを使用するかもしれないという議論を聞いたことがありますが、結局それは無視できました。UTF-8、16などをすべて使用しない理由はありますか?

また、Windowsプログラム、Linuxシェル、およびその性質については、安全にUTF-8を使用できますか?

+0

UTF-8をサポートしていない既存のプロトコルの場合、それはUTF-8を使用しないのが良い理由です。私は個人的にUTF-8エンコーディングをサポートしたいと思います。 ASCII文字空間(UTF-16の内容を "ダム"エディタで開くと私の目が滲む) –

+0

@pst:B e c a u s e l l o o o k s l i k e t h i s? – dan04

答えて

1

UTF-32が使用可能な場合は、他のバージョンよりも優先して処理することをお勧めします。

プラットフォームがUTF-32/UCS-4 Unicodeをネイティブにサポートしている場合、UTF-8とUTF-16はそれぞれの文字(文字シーケンス)ごとにさまざまなバイト数を使用するため、 UTF-32は各文字に32ビットの「フラット」を使用し、文字列操作を多くスピードアップしますが、索引による文字列の直接参照は不可能です。

もちろん、エンベデッドシステムのような非常に制限された環境でプログラミングしていて、ASCIIまたはISO 8859-x文字だけがであることが確実である場合、それらの文字セットを選択できます効率とスピード。しかし、一般的には、Unicode変換形式を使用してください。

+2

UTF-32は、同じデータに対してASCII(ASCII文字をエンコードする場合はUTF-8)の4倍のスペースをとります。これは間違いなく重要です。さらに、ISO-8859- *(およびUTF-8とは違う)のような「レガシー」文字セットとは異なり、UTF-32およびUTF-16でバイトオーダーのエンディアン問題が発生します。 – dkarp

+0

["UTF-32(またはUCS-4)は、各Unicodeコードポイントで正確に32ビットを使用するUnicode文字をエンコーディングするためのプロトコルで、他のすべてのUnicode変換フォーマットは可変長エンコーディングを使用します。そのコードポイントの直接的表現です。」(http://en.wikipedia.org/wiki/UTF-32/UCS-4) – dkarp

+0

@dkarpもう一度チェックしてみてください。私の悪い –

0

非常に高速で、エキゾチックな文字が必要ないと確信しているプログラムを書く必要があるとき(文字列操作を行うとき)、UTF-8が良い考えではありません。その他の状況では、UTF-8が標準でなければなりません。

UTF-8は、Windowsの場合でも、最近のほとんどのソフトウェアでうまく機能します。

+0

さて、WindowsでUTF-8ベースのソフトウェアを書くことはできますが、 "ANSI"文字列を取る 'fopen'のような関数を使わなくてはなりません:-( – dan04

+0

何?どの言語?Windows上にUTF-8ベースのソフトウェアを書くことは不可能だったと言いましたか?私はあなたのことを理解していません。あるいは誰かが彼のコメントを削除したかもしれない。 –

0

utf-8は、ファイルの格納とネットワーク転送に最適であることはよく知られています。しかし、人々はutf-16/32が処理する方が良いかどうか議論します。主な議論の1つは、utf-16はまだ可変長であり、utf-32でも文字ごとに1つのコードポイントが存在しないことです。したがって、utf-8よりもどのように優れていますか?私の意見では、utf-16は非常に良い妥協点です。

まず、utf-16で二重コードポイントを必要とするBMP側の文字は、ほとんど使用されません。その範囲の漢字(他のアジア文字も)は、基本的には死んだものです。普通の人は、古代の本をデジタル化するのに専門家を使用する場合を除いて、それらをまったく使用しません。したがって、utf-32はほとんどの場合無駄になります。これらの文字についてあまり心配しないでください。ソフトウェアが特別なユーザー用でない限り、正しく処理しなければソフトウェアの見栄えが悪くならないためです。

第2に、文字数に関連する文字列メモリ割り当てが必要なことがよくあります。例えば(正規化された形式でUnicode文字列を格納していると仮定して)10文字分のデータベース文字列です。utf-16では20バイトになります。ほとんどの場合、それはちょうどそのように動作しますが、極端な場合は5〜8文字しか保持しません。しかし、utf-8の場合、1文字の共通バイト長は欧米言語では1〜3、アジア言語では3〜5です。つまり、一般的なケースでも10〜50バイト必要です。より多くのデータ、より多くの処理。

+0

私は「正しく扱わないとソフトウェアが悪く見えることはないので、これらの文字についてあまり心配しないでください」と同意します。 「私のプログラムがUTF-16のサブセットを使用/サポートしている」という意味のとき、「私のプログラムはUTF-16を使用/サポートしています」と言っているのは、真実ではないか、まったく嘘です。バグは一つのことです。意図的にUTF-16全体をサポートしていないのはバグではありません。 – Kevin

関連する問題