質問

マルチバイトという用語は、文字の幅が 1 バイトよりも広くてもよい (ただし、そうである必要はない) 文字セットを指します (例:UTF-8) それとも、いずれにしても 1 バイトより広い文字セットを指しますか (例:UTF-16)?言い換えると:誰かがマルチバイト文字セットについて話している場合、それは何を意味するのでしょうか?

役に立ちましたか?

解決

用語はあいまいですが、私の国際化の仕事で、私たちは通常、Unicodeベースのエンコーディングを参照するために用語「マルチバイト文字セット」を避けました。一般的に、我々は(文字ごとに1つのだけのバイトを必要とエンコーディングを除く)各文字を定義するために1バイト以上を持っていただけで、従来の符号化方式のための用語を使用します。

シフトJIS、JIS、EUC-JP、EUC-KRを、典型的に含まれている中国のエンコーディングと一緒に

レガシーエンコーディングのほとんどは、いくつかの例外を除いて、処理するために、(より単純または、ページ・スワッピングモデル)状態機械モデルのようなものを必要とし、テキストストリームに後退することは複雑で、エラーが発生しやすいです。 UTF-8とUTF-16、UTF-8は、ビットマスクとUTF-16を用いて試験することができるよう、この問題に悩まされないのででき後退し、非病理学的な文書に転送し、サロゲートペアの範囲に対してテストすることができます主要な複雑させずに安全に行うことがます。

いくつかのレガシーエンコーディングは、タイ語、ベトナム語などの言語のために、マルチバイト文字セットの複雑さのいくつかを持っていますが、実際には文字を組み合わせて上に構築されており、一般的に広範な用語で集中されていない「マルチバイト。」

他のヒント

  

誰もがマルチバイト文字セットを語るならば意味は何?

いつものように、話をしている人に依存して、ということ!

論理的に、それは、シフトJIS、GBなど:可変長符号化をUTF-8を含むべきです。 UTF-16、多くの場合、このグループでは考えられない(何サロゲートで、でもそれ一種のですが、確かにそれはUTF-16LE / UTF-16BEを経てバイトにエンコードされたときに複数のバイトです)。

しかしMicrosoftlandに用語は、より典型的には(まだ悲しいことにたくさんありますそのうちレガシー非Unicodeアプリケーションのための)可変長デフォルトのシステムコードページを意味するために使用されます。 Windows上のシステムコードページは、これらのエンコーディングのいずれかに設定することができないため、この使用法では、UTF-8、UTF-16LE / UTF-16BEは含まれないことができます。

実際、いくつかの場合において、「MBCS」さもなければ「ANSI」として(さらにより誤解を招く)既知のシステムコードページの同義語、以下です。この場合、「マルチバイト」文字セットは、実際には文字あたり1つのバイトを使用して、欧州CP1252など西洋のように些細な何か、かもしれない!

私のアドバイス:あなたがいることを意味するとき、「可変長」を使用して、あいまいな用語「マルチバイト」を避けます。他の誰かがそれを使用するときに、明確化を依頼する必要がありますが、通常は、Windowsのバックグラウンドを持った人は、UTF CP932(シフトJIS)のようなレガシー東アジアコードページについてなく話されます。

あなたはいけないすべての文字セットは、1バイト= 1文字マッピングを持っています。すべてのUnicodeの変異体は、だけでなく、アジアの文字セットがマルチバイトです。

詳細については、私はこのWikipediaの記事を読み込むことをお勧めます。

マルチバイト文字とは、エンコードに 1 バイト以上を必要とする文字を意味します。ただし、これは、その特定のエンコーディングを使用するすべての文字が同じ幅 (バイト単位) を持つことを意味するものではありません。例えば:UTF-8 および UTF-16 でエンコードされた文字は複数バイトを使用する場合がありますが、 全て UTF-32でエンコードされた文字 いつも 32ビットを使用します。

参考文献:

一般的に、前者、すなわちUTF-8等が挙げられます。詳細情報については、マルチバイト文字を参照してください。

前者 - 。用語「可変長符号化」がより適切であろうが

私は一般の任意の文字を参照するためにそれを使用するの文字ごとに複数のバイトを持つことができます。

  

マルチバイト文字セットには、半角と全角の両方からなることができます   文字。このように、マルチバイト文字の文字列は、の混合物を含有することができます   1バイトと2バイト文字ます。

参考:シングルバイトおよびマルチバイトの文字セットする

UTF-8には、中国、タイなどの英語以外の文字は、3バイトに格納されている間、各英語の文字(ASCII)は1バイトに格納されていることを意味し、マルチバイト、です。あなたは英語と中国/タイを混ぜるときに、第2の英語の文字「t」は1バイトのみを使用しながら、「ทさt」のように、最初のタイ文字は「ท」3つのバイトを使用しています。マルチバイトエンコーディングを設計した人々は、それは、ストレージスペースの無駄のために1バイトに収まることができますが、英語の文字が3バイトに格納すべきではないことに気づきます。

UTF-16の固定2バイト長の店舗の各文字、英語または英語以外のいずれか、それはマルチバイトではなくワイド文字と呼ばれるようにします。タイ/中国の各文字が2バイトに完全にフィットする言語が、印刷UTF-8へのコンソール出力は、(関数wcstombsを使用してマルチバイト形式にワイド文字の変換を必要とするのは)非常に適してます。

UTF-32により記憶空間の浪費に固定された4バイト長誰も文字を格納するためにそれを使用に格納各文字。

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