- PR -

Javaと半角カナ文字&バイト数について

1
投稿者投稿内容
ペーぺー01
常連さん
会議室デビュー日: 2005/05/29
投稿数: 45
投稿日時: 2005-09-02 00:01
おつかれさまです。だれかご教授ください。
Linux上でMQから受信したString文字列(複数項目が連結されている)を
バイト変換して、各項目長でパースしてゆくと
半角カナ項目でずれてしまいます。
どうやら、半角カナが2バイト扱いされているようなのですが、
@なぜでしょうか?
(Windows上では1バイト扱いされ問題なく動きます)
Aどのような対応策があるのでしょうか?
BJavaはUnicodeで扱われるので、全ての文字は2バイトだと思っていたのですが、
 実際に半角英数や半角カナの入ったStringをgetBytesして1byteづつ切り出すと
 1文字づつ切り出されます。どうしてでしょうか?



[ メッセージ編集済み 編集者: 未記入 編集日時 2005-09-02 00:20 ]
Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2005-09-02 07:08
> @なぜでしょうか?

Javaは16ビット(2バイト)で文字列を扱うからです。

> Aどのような対応策があるのでしょうか?

適切な日本語エンコーディングでgetBytesしましょう。

> BJavaはUnicodeで扱われるので、全ての文字は2バイトだと思っていたのですが、
>  実際に半角英数や半角カナの入ったStringをgetBytesして1byteづつ切り出すと
>  1文字づつ切り出されます。どうしてでしょうか?

getBytes()の引数にUnicodeエンコーディングを与えていないからだと思います。

ただ、もし電文を項目長で切り出しをするのであれば、もともとの生のMQから渡されてくるデータを利用しないと危ない気がしますね。はじめからInputStreamとかbyte[]で取得したらいかがでしょうか。
ペーぺー01
常連さん
会議室デビュー日: 2005/05/29
投稿数: 45
投稿日時: 2005-09-02 09:17
Anthyhimeさん語返答ありがとうございます。
受信電文をbyte[]で取得したものを、
項目長で切り出して試してみます。

アドバイスありがとうございます。
1

スキルアップ/キャリアアップ(JOB@IT)