• 締切済み

環境に依存しない文字長(日本語含む)の取得方法

Stringデータ(日本語含む)の文字長を取得したいと考えています。 但し、日本語は2byte文字としてカウントしなくてはいけません。 で、今まで、 String.getBytes().length; で取得していたのですが、何かのタイミングで日本語を2byteとして扱えず、 「あいうA」を4byteと算出してしまうことがありました。 それで、getBytes()の引数にgetBytes("SJIS")と明示して取得することで、環境に依存しないbyte配列変換ができるのかなぁ、、と思っていますが、 この対応は間違っていないのでしょうか? また、これ以外の日本語byte数のカウント方法で「環境に依存しない」はあるのでしょうか? ご教授願います。

みんなの回答

  • covachan
  • ベストアンサー率38% (46/120)
回答No.3

以前、開発の案件で作業中に似たようなことがありました。 火のついたプロジェクトでしたから検証も無しで結局のところ原因はわかりませんが・・・ その時は一度char配列にしてあげたあと、文字列を作り直すことで正常なbytesサイズが取得できるようになりましたね。 くどいようですがdump歯していないので原因はわかりません。

  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.2

文字列が何バイトになるのかは、「環境」ではなく「使用する文字コード」 によってかわってきます。 従って、そもそも「環境に依存しないで...」という考え方が 間違っていると思います。 #1さんの言われている通り、目的を教えてもらわないと、 あなたの望む答えは得られないと思います。 *何かを勘違いしているのでは?  少し、頭を整理した方がいいかもしれませんね。

  • ranx
  • ベストアンサー率24% (357/1463)
回答No.1

「文字長」って何ですか? 間違っていないかどうかは、目的が分からなければ答えられないと思います。 日本語は2byte文字としてカウントということですが、 例えば半角カナは、SJISでは一文字1バイトですが、日本語EUCでは一文字2バイトです。 欲しい数字はどちらですか?

tomoiida
質問者

補足

説明不足で申し訳ありません。 >例えば半角カナは、SJISでは一文字1バイトですが、>日本語EUCでは一文字2バイトです。 >欲しい数字はどちらですか? 半角カナは1byteでカウントしたいです。 ということはやはりgetBytes("SJIS")で良いということなのでしょうか?

関連するQ&A