2011-01-25 12 views
4

誰かが、utf8に1〜3バイトの可変長エンコーディングがあると言ったばかりです。なぜ誰もlatin1を使用していますか?

なぜ誰もがlatin1を使用していますか?同じものがutf8に格納されている場合は1バイトですが、utf8は大きな文字セットに適応できるという利点があります。

  • 誰もがlatin1を使用する隠れた理由はありますか?
  • utf8とlatin1を使用する場合の短所は何ですか?
+3

私はそれがデフォルトであり、変更を気にしないので、多くの時間を人々が使用することがわかりました。 – bcmcfc

+5

いいえ、最初の128文字だけがUTF-8では1バイト、128〜255の文字は2バイトです。 – Gumbo

+1

ラテン1を故意に使用した最後の時間は思い出せません。 – Quentin

答えて

8

ISO 8859-1は、少なくともテキストの内容についてHTTP()のような複数の規格の(少なくとも事実上の)デフォルトの文字エンコーディングです。

送信者によって明示的なcharsetパラメータが指定されていない場合、 "text"タイプのメディアサブタイプは、HTTP経由で受信したときにデフォルトのcharset値 "ISO-8859-1"を持つように定義されます。 "ISO-8859-1"またはそのサブセット以外の文字セットのデータは、適切な文字セット値でラベル付けされなければならない(MUST)。

ISO 8859-1が選ばれたのは、おそらくインターネットベースの技術の基本的な文字セットであるUS-ASCIIのスーパーセットであるからです。スイスのジュネーブでCERNでWorld Wide Webが発明され、開発されたことで、残りの128文字に西ヨーロッパ言語の文字を選択する理由があるかもしれません。

Unicode標準が開発されたとき、ISO 8859-1の文字セットがUnicode文字セット(ユニバーサルキャラクタセット)のベースとして使用され、最初の256文字がISO 8859の文字と同じになりました-1。これはおそらく、多くの技術の標準文字エンコードであったため、ISO 8859-1の重要性のために行われました。UTF-8とは逆にISO 8859-1の利点を議論するために今すぐ

、我々はこれらの文字をエンコードするために使用されている基本的な文字セットと符号化方式を調べる必要があります:

  • ISO 8859-1には256文字が含まれ、各文字の文字ポイントはバイナリ表現に直接マッピングされます。したがって、123 は、01111011 でエンコードされます。

  • UTF-8は、プレフィックスが語長を示すプレフィックス付き可変長符号化方式を使用します。 UTF-8はユニバーサルキャラクタセットのキャラクタをエンコードするために使用され、エンコードスキームは1,048,576文字をエンコードできます。最初の128文字は1バイト、0x80〜0x7FFの文字は2バイト、0x800〜0xFFFFの文字は3バイト、0x10000〜0x1FFFFFの文字は4バイト必要です。

したがって、コード化可能な文字の範囲とコード化された単語の長さが異なる場合は違いがあります。

「正しい」文字エンコーディングの選択は、必要に応じて異なります。ISO 8859-1の文字(またはUS-ASCIIのサブセット)のみが必要な場合は、ISO 8859-1のみを使用してくださいUTF-8とは逆の各文字に対して1バイトが必要です。文字128-255は2バイト必要です。また、ISO 8859-1以外の文字が必要な場合は、UTF-8を使用してください。

+0

+1しかし、このde UTF-8は広く国際標準化されていますが、国際化が問題となる場合は唯一の実行可能なオプションです。 (あなたが言ったことを修正していない、ちょうど注釈をつける) –

+0

@ペッカ:はい、そうです。私は私の答えを広げます。 – Gumbo

0

あなたは残りの部分は

で行く(私はそれが良いことだとは言わないよ何で行くので、これは、そのは本当に迷惑、それらを別のミキシング「理由」

Everyone uses latin1 because everyone else is too.. 

可能性があり理由、でも一部の人が使っていると思います)

3

1)パフォーマンス上の理由 長さが一定の場合、文字列のn番目の文字に移動するのは簡単です。可変長では、長さを知るために文字列の先頭からすべての文字を調べなければなりません。 ユニコードでこのパフォーマンスを達成する唯一の方法はutf-32です(すべての文字は4バイトです)。しかし、それはより多くのメモリを必要とする。

2)Latin-1の発音区別記号(アクセント)を含むすべての文字は128-255の範囲のlatin-1にあり、したがってutf-8では複数の文字でエンコードされます。

3)プログラマの多くは、Unicodeを使用する方法がわからないが

+0

ポイント3)ここではどういう意味ですか? latin1が使用しない特別なスキルは何ですか? – David19801

+1

たとえば、PHPとMySQLの間に適切なconneection encodingigを設定する必要があることがわかっている場合、それ以外の場合はゴミ箱を保存して取得します。 – Mchl

+1

一般的にユニコードとキャラクタセットについて知っておくべきことはほんのわずかですが、これは良い出発点です:http://www.joelonsoftware.com/articles/Unicode.html – ZoFreX

関連する問題