• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:UNICODEとは何なんですか)

UNICODEとは何なんですか

このQ&Aのポイント
  • UNICODE(ユニコード)とは、国際的に文字コードを統一するための規格です。
  • UNICODEはUTF-7、UTF8、UTF-16、UTF-32など複数のエンコーディング方式を含んでいますが、UTF-8が最も一般的に使用されています。
  • 今後はノーマルのUTF-8(BOMなし)を意識することが推奨されています。

質問者が選んだベストアンサー

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.3

> Wikiを見たらUTF-7、UTF8、UTF-16、UTF-32とあって、 > 更に5や9もあって、 > それ意外に中途半端に5や7や9があることが謎だったのです。 > こういった中途半端なUNICODEは従来の規格を生かすためだけで > 将来は消えていくと思っていればいいのでしょうか。 http://ja.wikipedia.org/wiki/Unicode の「3 エンコーディング(符号化方式)」を落ち着いて読めば,説明されているのではないですか。 > まるっきり統一するぞってやる気が感じられないのですが > どうしてこんなに乱立しているのですか? http://www.amazon.co.jp/dp/450154970X/ のカスタマーレビューが参考になると思います。 > BOM付きとかあって、これもよく分からずに悩んでいます。 http://ja.wikipedia.org/wiki/Unicode の「3 エンコーディング(符号化方式)」 http://ja.wikipedia.org/wiki/バイトオーダーマーク で,BOMの役割およびその影響が説明されています。 > 今後はノーマルのUTF-8(BOMなし)だけを意識すればいいのでしょうか。 はい,UTF-8を主に据えてソフトウェア開発をするのがよいと思います。

noname#159617
質問者

お礼

個別の案件に具体的にかつ丁寧にお付き合い頂き助かります。 確かにドラフト段階・・・と書かれていますね。 専門用語の羅列に圧倒されて吟味はしませんでした。深謝。 UNICODEの制定にあたっては色々な駆け引きがあったようですね。 そんなに沽券に関わることなのかと不思議に思うのですが・・・ 本を読んでみないことには詳細は分からないですね。 水面下での激しいやり取りは皆様のご回答で知ることができました。 これでは私がよく理解できないのも無理はないですね。 ソフトウェアというよりもHTMLなのですが、 JAVAScriptやphpがあるので一部入りますかね。

その他の回答 (3)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.4

すでに回答されている通りですが、簡単に書くと、それらは全部同じ文字コードです。 その文字コードをどうやってエンコードするかがいろいろあるわけです。 UTF-8 ・・・・・ いわゆる半角英数字記号(US-ASCII) 0x00 - 0x7F をそのままで扱えるのがメリット。ただし漢字などは16bitでなく24bitになってしまう。最大48bit。 UTF-16 ・・・・・ 漢字を含む多くの文字は16bitで表せるのがメリット。文字によっては32bit。 UTF-32 ・・・・・ すべての文字が同じ長さ(32bit)として扱えるのがメリット。 UTF-9 ・・・・・ 1Byteが9bitのCPUで扱うのに便利。 UTF-7 ・・・・・ 8bitを通さない7bitの通信路で使う。 UTF-5 ・・・・・ 1つの単位が2の5乗つまり32種類なので、ビットパターンで無く、英数字(0-9A-V)32種の文字列で表せるのがメリット。 US-ASCIIとの互換性があるため、通信上ではUTF-8が普通です。7bitの通信路はインターネット上にはもう存在しないと言っても良いでしょう。 ただし、コンピューターの内部処理とか、ファイルに書くときにはUTF-16とかUTF-32も使われます。UTF-32のようにすべての文字の長さが一定だとプログラムが楽です。メジャーな言語Javaの内部コードはUTF-16です。Windowsのファイル名もUTF-16でディスクに書かれています。 9は特殊な環境用なので特殊な環境がある限りは使われるでしょう。UTF-5とUTF-9のことは忘れて良いと思います。 UTF-7は、ブラウザが解釈するので、注意しないとセキュリティホールになります。 http://gihyo.jp/admin/serial/01/charcode/0001

noname#159617
質問者

お礼

ご回答有り難うございます。 これの意味するところは全世界の文字数は65536語では収まらなかったということですね。 UTF-8だと漢字が3バイトになるのはそういう意味だったのですか。 インターネットはUTF-16や32になる可能性もなきにしも非ずですね。 今は些細なバイト数はあまり関係ないですし。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

一般家庭でパソコン中心だと見掛けることは少ないですが、9bit/18bit単位のCPUとかがあります。 その場合、8の倍数bitのUTF-8/UTF-16より9の倍数bitのUTF-9/UTF-18の方が扱いやすくなります。 以前は、通信には7bitしか使えない環境がありました。 欧米(特に米)中心のネットワークでは、7bit ASCIIの範囲の文字で十分だったのです。電子メールで使う日本語コードにISO-2022-JPが使われるのもそんな理由です。 Shift_JISをそのまま送ろうとすれば、最低でも8bit目が消されることによる文字化け、最悪の場合はメールサーバーが落ちる、ということがありました。 そんな7bit通信網で通すには、8bit使うUTF-8では問題で、UTF-7が必要になります。

noname#159617
質問者

お礼

実例を交えて教えて頂き大変参考になりました。 メールサーバが落ちるって、そんなに大げさな問題だったんですね。 ある回答者様から今後はUTF-8が主流になると聞きました。 ということは7bitや9bitの規格は淘汰されていくのではないでしょうか。 9bitとかを作ったのは一種のガラパゴス戦略ですよね? それとも、これからも生き残っていくんでしょうか。 BOM付きとかあって、これもよく分からずに悩んでいます。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

まず。 ・コンピュータでは、文字は「番号」で表現している。 ・同じ値を表わすのに、複数のやりかたがある。 ・8bit/1バイト単位で処理するケースが多い ということはご理解してますでしょうか? UNICODEは文字に番号を振り分ける、その振り分け方を決めるものです。 その番号を、どんな方法で表現するかの約束がUTF-8等です。 例えば 「a」には 0061(16進数で) という番号が割り振られています。 これを U+0061 と表現する、という約束を決めれば、 「U+0061」とあったら、それは「a」です。 これを= と表現する、という約束を決めれば、 「=」とあったら、それは「a」です。 これを8ビットのパターンで 01100001 と表現する、という約束を決めれば、 「01100001」というパターンがあったら、それは「a」です。 と、同じ番号でもいろんな表現方法があります。 こういう約束がUTF-8やUTF-16などというものです。 各種あるのは、それぞれに意味があります。 Unicodeは当初16bitの範囲に文字を収めることを目標にしていました。 それならば、「1文字=16bit」で処理するのは極自然なやりかたです。例えば、文字数を数える時に、バイト数/2 で求められます。これをそのまま使えば、UTF-16です。 しかし、これは従来使われてきた「1文字=7bit/8bit」の環境とは非常に相性が悪いです。「8bit全部0」というパターンは、従来文字列の区切りなど特別な用途に使われることが多いのですが、UTF-16では、1バイト単位に区切るとその「0」が非常に多く出現します。(例えば、上にある「a」のうち、1バイトは「0」です) そこで、共通する文字はそのまま1バイトで、それ以外は特別なパターンを使って複数バイトで表現することで、従来環境との共存を計ったのがUTF-8,UTF-7等です。 16bitで収めるはずでしたが、結局無理でした。そのため、2文字分で合せて一文字になるパターンを用意することで、使える文字を増やしました。この2つで1文字のものも「一文字」になるように、1文字=32ビットにしたのがUTF-32です。 これはUnicodeだけの話ではありません。 ISO-2022-JP(いわゆるJIS)、Shift_JIS,EUC-JPでも同じことです。 これらは、JIS規格で決まった割り振り表を基に、それぞれの方法で変換(符号化)したものです。 ISO-2022-JPは7bit/文字でも使えるように、モードを切り替える Shift_JISは、それまで使われていた「半角カタカナ」をそのまま使えるようにずらす EUC-JPは8ビット目が1かどうかで1バイト文字か2バイト文字かを判定する。

noname#159617
質問者

お礼

詳細に有り難うございます。 1バイト=8ビットというのは分かります。 16bitということは全世界の文字数は65536個・・・ で足りないからUTF-32があると思いましたが違いますか? UTF-8、16、32の関係は理解できなくもないのですが、 それ意外に中途半端に5や7や9があることが謎だったのです。 こういった中途半端なUNICODEは従来の規格を生かすためだけで 将来は消えていくと思っていればいいのでしょうか。

関連するQ&A