UNICODEとは何なんですか

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

UNICODEとは何なんですか

Shift-JISからUTF8への切り換えを勧められ、 今、文字コードや改行コードについて調べています。 取り敢えずUTF-8への変換ツールをダウンロードしてきたところです。 それで凄く分からなくなったのですが、 UNICODEって文字コードを国際的に統一しましょうって規格ですよね。 Wikiを見たらUTF-7、UTF8、UTF-16、UTF-32とあって、 更に5や9もあって、UTF-8にもBOM付きだの何だのとありました。 まるっきり統一するぞってやる気が感じられないのですが どうしてこんなに乱立しているのですか? 今後はノーマルのUTF-8(BOMなし)だけを意識すればいいのでしょうか。 以上2点のうち分かる方で結構ですので宜しくお願いします。

noname#159617
noname#159617

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

  • ベストアンサー
  • 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% (4847/10260)
回答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

  • リダイレクトする時の文字コードをUnicodeに

    現在、VisualStudioで、システムコールの標準出力結果をリダイレクトしてファイルに保存する プログラムを書いています。 _tsystem(command); のような感じで、commandには "hogehoge > hoge.txt"のように入ります。 ※command はTCHAR この出力結果が、Shift-Jisになっているようで、Shift-Jisだと日本語が文字化けせずに表示されるのですが、Unicode UTF-16にすると文字化けしてしまいます。 Unicode UTF-16とかUnicode UTF-8など文字コードを指定してリダイレクトできないのでしょうか。 ちょっと調べてみましたがうまく見つかりませんでした。

  • PHPの文字コードどのように設定すればいいですか?

    PHPをテキストエディタ(TeraPad)で、書こうとしているのですが、文字コードの設定がわかりません。 初期文字コード SHIFT-JIS JIS EUC Unicode UTF-8 UTF-8N いろいろあってどれを選んだらいいのかわかりません。 今はSHIFT-JISにしてます。 保存文字コード 自動 今は自動にしてます。 初期改行コード CR+LF 今はCR+LFにしてます。 保存コード 自動 今は自動にしてます 間違っている、又はこちらのほうがいいというのがありましたら是非教えてください。よろしくお願いします。

    • ベストアンサー
    • PHP
  • unicode と shift_jis

    テキストファイルを読み込みデータを作成して出力するプログラムを作成しているのですが国際化させることになりました。そこで問題が‥テキストファイルが日本用はshift_jis、海外用はunicodeで構成されています。shift_jisでの文字列操作は良いとしてunicodeが全然わかりません。海外向けを想定したときに気をつけなければならないこともわかりません。なんでもいいので教えてください。お願いします。特に、unicodeの文字列操作はまったくよくわかりませんので細かい点から教えていただけると光栄です。よろしいお願いします。

  • unicodeについて教えてください

    最近、unicoldeというものがあることを知りました jisコードとかシフトjisコードにもない文字が随分登録されています。 この、jisコードとかシフトjisコードにもない、unicodeだけに登録されている文字一覧表みたいなものを作りたいと思っているのですが、どうすればよいのでしょうか。 また、jisコード等から文字一覧表は作成できますが、vba辺りから、このunicodeからの漢字一覧表を作成できるのでしょうか。  お分かりの方、是非教えてください。

  • メモ帳で保存した日本語テキストや日本語XMLをJavaで読込、保存。メモ帳での保存文字コードはなにが推奨されるでしょうか?

     Windows9x系ではないWindowsVistaやXP、NT、2000のメモ帳(Unicodeのbig endianは保存できるがおそらくUnicodeのbig endianでのBOMなし保存不可。UTF-8は保存できるがUTF-8でのBOMなし(UTF-8N)の保存不可。Unicodeのlittle endianは保存できるが仕様なので言うまでもないがUnicodeのlittle endianでのBOMなし保存不可。)で保存した日本語テキストや日本語XMLをJavaで読込、保存。メモ帳での保存文字コードはなにが推奨されるでしょうか? やはりJavaのString型に近いUnicode big endianがよいのでしょうか? それともJava側で自動認識してくれるのでしょうか? XMLの場合は1行目でそのXMLファイルが使用している文字コードが何か宣言しますよね。 でもテキストファイルだと文字コードを宣言する場所がないみたいですし・・・(ここでの文字コードを宣言する場所としてはBOMは例外ですよ 念のため) 補足:メモ帳だとUnicode big endianで保存すると必ずBOMが付くみたいです。 メモ帳はLF改行が使えません。CR+LF改行のみ対応です。

    • ベストアンサー
    • Java
  • ファイルの変換についての質問(iconv)

    ファイルの文字コードを変換したいということですので、 ファイルの文字コードは、shift-jisからBomがつくUTF-8ファイルに変換 するつもりです。 現在使っているソフトは GNU の iconvです。 OSはWindowsXpです。 どうやってMS-DOSからファイルをBomが付くUTF-8のファイルにします? なんの設定する必要がありますか?

  • unicodeにしかない漢字をSJISの外字に簡単登録

     Windows OS上には、Shift-JISにないunicode文字が たくさんありますが、shift-JISで漢字を処理している プログラムでは、プログラムをunicode対応に変更する 方法もありますが、変更をしないとすれば、Shift-JIS上の 外字を作成し、コードを対応付けして変換するようにするしかありません。(あまり頻度は多くはないので) ただ外字エディタで外字を作るのはかなり面倒な作業です。 unicode上の漢字イメージ情報を元にShift-JISの外字へ登録するようなツールはないでしょうか? あれば、外字対応が非常に楽になるのです。 ご存じの方があれば教えて下さい。  

  • JIS UNICODEに関して

    Wordで質問があります。 文字をJIS規格にしてWordを作成したのですが、たくさんあるフォントでJIS規格がどれかわかりません。 そこで疑問なんですが端的に、Wordであるたくさんのフォントで、 JIS規格のフォントはどれでしょうか? また、どのフォントがJISなのかUNICODEなのかは、覚えるしかないんでしょうかね?見わけがつくものなんでしょうか?

  • 文字コードってUTF-8が主流に?

    文字コードについては、UTF-8が主流になりつつあるってネットで観ました。 文字コードを検索すると次のような説明があります。 (UTF-8のエンコード) UTF-8は、UnicodeとASCIIコードを混在させるための規格です。 (シフトJISコード) シフトJISコードは、SJISとも呼び、Microsoft社が決めたコードでWindows95やMS-DOSやMacなどで使用されています。 その上で質問です。 1、 UTF-8が主流になるってことは、Windows、MacがUTF-8に方向転換するってことでしょうか? 2、 仮にUTF-8が主流になっても、サイトに <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> と記述していれば文字化けなく表示されるのでしょうか? 今の時点では判断できない質問なのでしょうか・・

  • Unicode-Japaneseでの絵文字変換

    Unicode-Japaneseを使って別キャリアの絵文字を相互変換しようと 思っています。 ソースはShift_JISで作成、画面表示もShift_JISです。 $in{text}はformからの受取です。Softbankの3G端末でテストしています。 入力を受け取り、一度、utf8に変換後、また元に戻しているつもりですが、 $str2を画面に表示しても、絵文字が化けてしまっています。 (普通のテキストなら化けません) 何か考え方が間違っているでしょうか。 以下、変換して戻している部分です。 うまくいった場合には、$str1 をデータとして保存しようと思っています。 $s = Unicode::Japanese->new($in{text},"sjis-jsky"); $str1 = $s->conv("utf8"); $s = Unicode::Japanese->new($str1,"utf8"); $str2 = $s->conv("sjis-jsky"); よろしくお願いいたします。

専門家に質問してみよう