HOME»応用情報技術者試験掲示板»Unicode文字列が何文字あるかという問題
投稿する

[4791] Unicode文字列が何文字あるかという問題

 八王子さん(No.1) 
【質問内容】
設問にある「それ以降のバイトは10で始まる」という点を考慮した答えになっていのでは?

【私の考え】
問題文には以下2つの条件が記載されています。

(1)「先頭バイト」は2進数で0もしくは11
(2)「それ以降」のバイトは2進数で10

つまり、問題文にある最初の16進数2バイト「CF 80」を例にすると、2進数表記にして

「先頭バイト」と「それ以降」
「1100(C) 1111(F)」と「1000(8) 0000(0)」

となり、
(1)の「先頭のバイトが11」の条件は「1100(C)」で当てはまっていることになります。
そして(2)の「それ以降のバイトが10」も「1000(8)」で当てはまっています。
よって「CF 80」は設問の条件を満たしていると分かります。

しかし問題文の文字列中盤にある「33 2E」は

「00110011  00101110」

となり、
1バイト目は0で(1)を満たしますが、それ以降(2バイト目)は10ではないので条件を満たしていません。

なぜ解説では(2)の条件を満たしていないものまでカウントして9文字としているのでしょうか?(2)の条件はこの問題を解くのに使われない条件なのでしょうか?

https://www.ap-siken.com/s/kakomon/24_haru/q4.html
2024.01.27 08:58
jjon-comさん(No.2) 
AP プラチナマイスター
ご指摘のとおり,問題文の
> それ以降のバイトは10で始まる。
は,
> それ以降のバイト「が存在するならばそれ」は10で始まる。
とする方が,適切な説明文だと思います。

出題者は,受験者に対して,
・UTF-8という用語を聞いたことがあるレベルでなく,その概要の知識も求めている。
・ASCIIコード文字をUTF-8エンコードしても1文字=1バイトだと知っていて欲しい。
・だから,エンコード後に2バイト目以降が存在しない場合の説明は不要と判断した。
ということなのでしょう。
2024.01.27 10:48
 八王子さん(No.3) 
あ、なるほど。

「CF 80 ~」などはエンコードした場合2バイト以上になる文字列だった。だから「それ以降のバイト」にある条件に一致する。

「33 2E」などはASCIIコード(英数字)をエンコードしているから1バイトで済んでおり2バイト目以降はそもそも存在しない。

という事だったのですね。言われて納得しました!ありがとうございます!

いや~しかし……確かにUTF8は1~8バイトですが…ちょっと設問の書き方が不親切じゃないですかねぇ……
2024.01.27 13:28
納豆のたれさん(No.4) 
IPv4にはクラスという概念がありますよね。
IPv4を2進数表記した時
0で始まる:クラスA
10で始まる:クラスB
110で始まる:クラスC
1110で始まる:クラスD

一方、UTF-8を2進数表記した時
0で始まる:1バイト文字
10で始まる:継続バイト
110で始まる:2バイト文字の先頭バイト
1110で始まる:3バイト文字の先頭バイト
11110で始まる:4バイト文字の先頭バイト

1110は16進数で E なので、
Eで始まるバイトが来たらそこから3バイトで1文字です。

これを知っていると
CF 80 E3 81 AF E7 B4 84 33 2E 31 34 E3 81 A7 E3 81 99

CF 80(E3 81 AF)(E7 B4 84)33 2E 31 34(E3 81 A7)(E3 81 99)
CF 80(E3 81 AF)(E7 B4 84)"3.14"(E3 81 A7)(E3 81 99)
にできて少し時短ができるかも
2024.01.27 15:54
 八王子さん(No.5) 
納豆のたれさんありがとうございます!

CF 80(E3 81 AF)(E7 B4 84)"3.14"(E3 81 A7)(E3 81 99)

↑この"3.14"はどういう意味ですか?
「33 2E 31 34」→「3.14」に変換された理由がちょっとよく分かりませんでした。

それ以外に関しては目からウロコです!ありがとうございます。
2024.01.27 19:33
納豆のたれさん(No.6) 
ちょっと説明を端折りました。
ASCIIコードで「33 2E 31 34」は文字列に直すと「3.14」だからです。

ちなみに問題の文字列をデコードすると、
  πは約3.14です
です。
※最初の文字はギリシャ文字の「パイ」
2024.01.27 19:49

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。
© 2010-2024 応用情報技術者試験ドットコム All Rights Reserved.

Pagetop