プロジェクト

全般

プロフィール

操作

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)を超えた文字は削除する。

菅間 聖耶 さんが8ヶ月前に更新 · 0件の履歴