アプリ版:「スタンプのみでお礼する」機能のリリースについて

Windowsで使用されているUnicodeはUTF-16と理解しているのですが、
UTF-16→UTF-8は変換できると思いますが、
UTF-8→UTF-16の変換は一意に変換されるものなのでしょうか?

UTF-16は2バイトなので65,535文字が上限になり、
一方UTF-8は1~6バイトで、実質データ部は最大4バイトなので
表現できる文字数が違うので「UTF-8→UTF-16」の完全変換は無理なのでは?と思っています。

ご存知の方すみませんがどうぞご教授ください。

A 回答 (3件)

まず「1文字が2バイト(16ビット)幅固定」というのは、UTF-16ではなくUCS-2のことです。



UCS-2はコードエリア0000~FFFFの65536文字分のみを表現できる、ある意味Unicodeのサブセットです。
UTF-16とは、サロゲートペアという仕組みを導入することで、UCS-2との互換を保ったまま、000000~10FFFF(D800~DFFFはサロゲートペア用のため除外)の1112064文字分を表現できるようにしたもので、正確には16/32ビット幅のマルチバイト文字コードです。
今日、普通にUnicodeといえばUTF-16形式を指しますが、初期版ではUCS-2でした。

UTF-8は、確かに理論上は00000000~7FFFFFFFまで表現可能ですが、Unicodeで実際にコードエリアとして定義されているのは10FFFFまで(しかもその中身はスカスカで、エリアがこれ以上拡張される可能性はまずない)なので、UTF-8とUTF-16の一意相互変換は全く問題ないとお考え頂いて結構です。
    • good
    • 1
この回答へのお礼

ありがとうございます。
よくわかりました。
UCS-2とUTF-16の違いを理解していませんでした。

お礼日時:2006/09/18 23:00

そもそも「文字セット」と「符号化」を


ごっちゃにしてるのが混乱の原因でしょう.

UNICODEが規定している「文字」を
コンピュータ上ではどのように表現させるかが
「符号化」であり
符号化には UTF-8 とか UTF-16 があるということです.
したがって,
元は同じものを違った表現で表してるだけです.

表現につかえるバイト数がいくら多くたって
それを全部使うわけではありません.
実際は「すかすか」なのはNo.2さんの
おっしゃるとおりです.
すかすかにすることで「誤解のない表現」を
実現できます.

そもそもSJIS/EUC/JISとかだって
大雑把には二バイトですので 65536 文字ですが,
65536文字もありません.
「すかすかで誤解のない表現」というのは
符号化ではよくあります。。

#相互互換で問題になるのは
#JIS X 0208とかとUNICODEの方ですな
    • good
    • 0
この回答へのお礼

ありがとうございます。
どうやら文字セットと符号化をごっちゃにしていてました。
すかすかということでありがとうございました。

お礼日時:2006/09/18 23:01

 普通に考えれば UTF-16は 65535文字しか使えないのですが、それに気付いた偉い人はサロゲートペア


という仕組みを作り出して回避しました。

 これは 0xd800~0xdbffを上位、0xdc00~0xdfffを下位とした2つの 16bitをサロゲートとし、この組み合わせで 1024x1024文字分を作り出しました。

 なので現状は 65536 - 2048 + 1024 x 1024 = 1112064文字が UTF-16で理論上表現可能な文字数となります。

参考URL:http://www.wdic.org/w/WDIC/%E3%82%B5%E3%83%AD%E3 …
    • good
    • 0
この回答へのお礼

ありがとうございました。
サロゲートペアを使用していたのですね。

お礼日時:2006/09/18 22:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!