Java の文字列と SOSI の扱いについて¶
🧩 Java の String 型の前提¶
- Java の
Stringは UTF‑16 で値を保持する。 - 全角文字に SO/SI は存在しない(UTF‑16 の世界には制御コードとして登場しない)。
🔄 Java における文字コード変換の挙動¶
Java で文字コード変換を行うと、結果は byte 配列 になる(Oracle では BLOB として登録)。
-
全角文字 → EBCDIC 変換
- 変換後の byte 配列に SO/SI が付加される。
-
全角文字・半角カナ → JIS 変換
- 変換後の byte 配列に SO/SI(正確にはエスケープシーケンス) が付加される。
🛠 リビルド版での対応方針¶
1. SO/SI の扱い¶
- 全角文字に SO/SI を挟む処理は不要。
- 現行で「SO/SI が含まれている場合」という条件は、
→ “全角文字が含まれている場合” に置き換える。
2. 桁数調整ルール(変換後のバイト長に合わせるため)¶
■ 全角文字項目 → EBCDIC 変換¶
- 末尾を (項目の桁数 ÷ 2 − 1) になるまで 全角スペースで埋める。
- (項目の桁数 ÷ 2 − 1)を超えた文字は削除する。
■ 全角文字項目 → JIS 変換¶
- 末尾を (項目の桁数 ÷ 2 − 3) になるまで 全角スペースで埋める。
- (項目の桁数 ÷ 2 − 3)を超えた文字は削除する。
■ 半角カナ項目 → JIS 変換¶
- 末尾を (項目の桁数 − 6) になるまで 半角スペースで埋める。
- (項目の桁数 − 6)を超えた文字は削除する。