
No.2ベストアンサー
- 回答日時:
まず「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の一意相互変換は全く問題ないとお考え頂いて結構です。
No.3
- 回答日時:
そもそも「文字セット」と「符号化」を
ごっちゃにしてるのが混乱の原因でしょう.
UNICODEが規定している「文字」を
コンピュータ上ではどのように表現させるかが
「符号化」であり
符号化には UTF-8 とか UTF-16 があるということです.
したがって,
元は同じものを違った表現で表してるだけです.
表現につかえるバイト数がいくら多くたって
それを全部使うわけではありません.
実際は「すかすか」なのはNo.2さんの
おっしゃるとおりです.
すかすかにすることで「誤解のない表現」を
実現できます.
そもそもSJIS/EUC/JISとかだって
大雑把には二バイトですので 65536 文字ですが,
65536文字もありません.
「すかすかで誤解のない表現」というのは
符号化ではよくあります。。
#相互互換で問題になるのは
#JIS X 0208とかとUNICODEの方ですな
No.1
- 回答日時:
普通に考えれば 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 …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 8 win8 "ベータ ワールドワイド言語サポートで Unicode UTF-8 を使用"を出したい 2 2023/05/23 19:57
- Excel(エクセル) 文字化け。メモ帳でUTF-8に変換後、エクセルへ貼り付けたいです。 3 2022/08/14 07:21
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- HTML・CSS <meta charset="utf-8"><!-- 文字化け防止ユニコード --> ?最近モバイル 1 2022/12/11 04:27
- PHP phpのメールフォームの完了画面でメール受信のコードを書いています。 1 2023/05/31 11:39
- Windows 8 メモ帳による文字コード変換 2 2022/09/01 18:38
- UNIX・Linux テキストファイルをページ番号付きでコマンドラインから印刷したい 1 2023/02/22 12:47
- PHP Content-Typeが機能していない? 2 2022/07/17 11:10
- その他(プログラミング・Web制作) Sikulix2.0.5(Jython2.7.3)でcsvを読込WEB検索条件にpasteで文字化け 1 2023/03/31 11:02
- その他(教育・科学・学問) IUと単位は、同じですか? 例えば、写真の20単位は、20IUという意味ですか? https://w 1 2023/02/04 18:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JavaのStringクラスに「外字」...
-
javaで質問です。 文字列2023/2...
-
Windows-31Jからutf-8への変換...
-
javascriptで文字列のsjis利用...
-
int型のゼロ埋め
-
エクセルVBAで「〜」が表現でき...
-
カタカナの「ソ」以降の文字が...
-
ダブルクォーテーションのrepla...
-
"\\n"を"<br>"にうまく変換でき...
-
IBM漢字コード⇒SJIS変換方法
-
Path型をString型へ変換する(Java)
-
char型からアスキーコードへの変換
-
文字列の比較
-
アスキーコード表を利用した文...
-
replace関数で複数の文字の変換...
-
全角英数字とハイフンを半角に...
-
文字化け対策について
-
replace()での文字列置換について
-
なぜか + が半角スペースに変換...
-
JIS8の半角かな文字をUnicodeの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
javaで質問です。 文字列2023/2...
-
ダブルクォーテーションのrepla...
-
javascriptで文字列のsjis利用...
-
javaの初歩的な質問です。
-
Visual Basic でのコードをASCI...
-
JavaのStringクラスに「外字」...
-
Path型をString型へ変換する(Java)
-
エクセルVBAで「〜」が表現でき...
-
int型のゼロ埋め
-
JAVAでのShift-JISとEUC-JP間の...
-
C言語32bitから64bitの移行につ...
-
UTF-8とUnicodeの互換性
-
文字列の比較
-
COBOLで半角カナを全角カナに変換
-
substring バイト単位でやりたい
-
Windows-31Jからutf-8への変換...
-
カタカナをローマジに変換する。
-
[Javascript]エンターキー押下...
-
byte型のマイナスの扱いについて
-
文字化け対策について
おすすめ情報