文字コード掲示板


一括購読


No.063投稿日時:2003/05/14(水) 10:14    <親記事>
投稿者:榊原  <E-Mail>

文字コード変換によるバイト数について

はじめまして。榊原と申します。

質問なのですが、UTF-8やUTF-16からEUCコードへの変換を行った場合、
文字列のバイト数が変換前と変換後で多くなることはありえるのでしょうか?

EUCコードは最大3バイトであると認識しておりますが、UTF-8やUTF-16で
1バイトや2バイトで表現される文字が、EUCで3バイトとなるような文字は
存在しますでしょうか。

ご存知の方おられましたら、ご教授頂けないでしょうか。
よろしくお願いいたします。


No.065投稿日時:2003/05/14(水) 21:16    <↑親記事:No.063>
投稿者:森山 将之

Re: 文字コード変換によるバイト数について

榊原さん、はじめまして。

> 質問なのですが、UTF-8やUTF-16からEUCコードへの変換を行った場合、
> 文字列のバイト数が変換前と変換後で多くなることはありえるのでしょうか?

ありえます。

> EUCコードは最大3バイトであると認識しておりますが、UTF-8やUTF-16で
> 1バイトや2バイトで表現される文字が、EUCで3バイトとなるような文字は
> 存在しますでしょうか。

UTF-8 で 1 バイトで表現されるコードは、US-ASCII なので、これに関しては、
EUC-JP の 3 バイト表現 (JIS X 0212) になるという事はないと考えることが出き
るかもしれません。

しかし、EUC-JP の 1バイト表現 (code set 0) を JIS X 0201 ラテン文字と定義
し、JIS規格を厳密に従っていたりすると、UTF-8 の 7E TILDE を JIS X 0212 の
TILDE つまり、8F A2 B7 に変換するものがあるかもしれません。

とはいっても、IANA での EUC-JP の定義は、EUC-JP の 1 バイト表現 (code set
0) は、US-ASCII となっているので、UTF-8 の 7E を EUC-JP の 8F A2 B7 に変換
す るような実装が行われているものは、ほとんど無いと考えても良いかもしれま
せん。

UTF-16 では、そもそも 1 バイトコードはありませんのでパス。

UTF-8 の 2 バイトコードは、U+0080〜U+07FF の範囲のコードという事になります
が、この間のコードは、JIS X 0208 および JIS X 0212 に対応付けられている文
字が存在します。

具体的に知りたいのであれば、JIS規格などの原規格等を参照するなどして正確な
情報を得るようにしてください。

UTF-16 の 2 バイト(2 オクテット) コードには、JIS X 0212 の文字が割り当てら
れていますので、それらの文字が EUC-JP の 3 バイトコードに変換されるのはご
く自然な事でしょう。

Unicode と EUC-JP のような既存のエンコーディングとの変換は、単純な演算によ
って求められるものではありませんので、下手な仮定をしない方が良いと思います。
また、OS によって変換表が違うなどの問題がありますので、特定の OS で大丈夫
だからと特殊な仮定をするのも良くないでしょう。


No.067投稿日時:2003/05/17(土) 01:22    <↑親記事:No.065>
投稿者:榊原

詳しい説明どうもありがとうございます。
とても参考になりました。
もう少し調査してみます。
ご解答いただき誠に有難う御座いました。


> 榊原さん、はじめまして。
>
> > 質問なのですが、UTF-8やUTF-16からEUCコードへの変換を行った場合、
> > 文字列のバイト数が変換前と変換後で多くなることはありえるのでしょうか?
>
> ありえます。
>
> > EUCコードは最大3バイトであると認識しておりますが、UTF-8やUTF-16で
> > 1バイトや2バイトで表現される文字が、EUCで3バイトとなるような文字は
> > 存在しますでしょうか。
>
> UTF-8 で 1 バイトで表現されるコードは、US-ASCII なので、これに関しては、
> EUC-JP の 3 バイト表現 (JIS X 0212) になるという事はないと考えることが出き
> るかもしれません。
>
> しかし、EUC-JP の 1バイト表現 (code set 0) を JIS X 0201 ラテン文字と定義
> し、JIS規格を厳密に従っていたりすると、UTF-8 の 7E TILDE を JIS X 0212 の
> TILDE つまり、8F A2 B7 に変換するものがあるかもしれません。
>
> とはいっても、IANA での EUC-JP の定義は、EUC-JP の 1 バイト表現 (code set
> 0) は、US-ASCII となっているので、UTF-8 の 7E を EUC-JP の 8F A2 B7 に変換
> す るような実装が行われているものは、ほとんど無いと考えても良いかもしれま
> せん。
>
> UTF-16 では、そもそも 1 バイトコードはありませんのでパス。
>
> UTF-8 の 2 バイトコードは、U+0080〜U+07FF の範囲のコードという事になります
> が、この間のコードは、JIS X 0208 および JIS X 0212 に対応付けられている文
> 字が存在します。
>
> 具体的に知りたいのであれば、JIS規格などの原規格等を参照するなどして正確な
> 情報を得るようにしてください。
>
> UTF-16 の 2 バイト(2 オクテット) コードには、JIS X 0212 の文字が割り当てら
> れていますので、それらの文字が EUC-JP の 3 バイトコードに変換されるのはご
> く自然な事でしょう。
>
> Unicode と EUC-JP のような既存のエンコーディングとの変換は、単純な演算によ
> って求められるものではありませんので、下手な仮定をしない方が良いと思います。
> また、OS によって変換表が違うなどの問題がありますので、特定の OS で大丈夫
> だからと特殊な仮定をするのも良くないでしょう。


Script : Sylpheed 1.24
Modified by MORIYAMA Masayuki