質問
読み込んだ文字列を全角から半角に変換したいのですが、Mapperの「全角→半角」ロジックを使用しても期待通りに変換が出来ません。
回答
HULFT Squareにおける文字列の扱いについては、Javaの仕様により内部的にUnicodeを使用しています。一部のコネクターでは文字エンコードを指定可能ですが、指定された文字エンコードを前提としてUnicodeへ変換が行われています。
HULFT Squareでは、使用頻度が比較的高い「Windows-31J」*1 をUnicodeへ変換した際のコードポイント*2 を想定して、Mapperの「全角→半角」ロジックで対応しています。
よくある事例として、読み込み処理時の文字エンコード指定が「Windows-31J」ではなく「Shift_JIS」と指定している場合に、想定通りに変換されない文字があります。
*1日本語版Windowsで採用されている「Shift_JIS」規格の一種です。別名として「CP932」「MS932」とも呼ばれます。
*2コンピュータが文字を扱う際の内部的な数値
■対応策
[対応策1] 読み込み処理時の文字エンコードを「Shift_JIS」とする必要がある場合
- 読み込み処理の後に「SJISからCP932に変換」処理を追加する
- 書き込み処理の前に「CP932からSJISに変換」処理を追加する
◇SJISからCP932に変換
https://www.hulft.com/help/ja-jp/HULFTSquare/Content/Designer/Connector/char_convert_SJIS_to_Cp932.htm
◇CP932からSJISに変換
https://www.hulft.com/help/ja-jp/HULFTSquare/Content/Designer/Connector/char_convert_Cp932_to_SJIS.htm
[対応策2] 読み込み処理時の文字エンコードが「Shift_JIS」でなくても問題がない場合
- 読み込み処理の文字エンコード指定を「Windows-31J」へ変更する
- 書き込み処理の文字エンコード指定を「Windows-31J」へ変更する
補足
文字エンコードのうち「Windows-31J」と「Shift_JIS」については、同じコードポイントとなる文字でもUnicodeへの変換ルールが異なる文字があります。
文字 |
Windows-31J
Shift_JIS |
Windows-31j → Unicode |
Shift_JIS
→ Unicode |
― (全角ダッシュ) | 0x815C | U+2015 | U+2014 |
~ (全角チルダ) | 0x8160 | U+FF5E | U+301C |
∥ (二重縦線) | 0x8161 | U+2225 | U+2016 |
- (全角マイナス) | 0x817C | U+FF0D | U+2212 |
¢ (セント) | 0x8191 | U+FFE0 | U+00A2 |
£ (ポンド) | 0x8192 | U+FFE1 | U+00A3 |
¬ (ノット) | 0x81CA | U+FFE2 | U+00AC |
コメント
0件のコメント
記事コメントは受け付けていません。