MECSUtilsのMecsMappingFix_UnicodeToCP932関数によって、JIS→Unicode→Shift-JISで全角ハイフンが文字化けする問題が解決した

MECSUtils ver1.54では、文字コードを変換する時にハイフンを上手にマッピングしてくれる。

全角ハイフン(-)をJISからUnicodeへ、UnicodeからShift-JISへ変換すると、Shift-JISに変換した時に文字化けする。
たとえば電子メールを受信して何らかの処理を行い、ファイルに出力する時などに問題が発生する。

//文字化けするJISコードの全角のハイフン
jis: RawByteString = #$1B#$24#$42#$21#$5D#$1B#$28#$42; 

//JISからUnicodeに変換して表示する
Edit1.Text := MECSUtils.AnsiToUTF16(jis, 50220);

JISからUnicodeへ変換した時は問題なく表示される。

このとき全角ハイフンは’MINUS SIGN'(U+2212)になっている。

この’MINUS SIGN'(U+2212)をShift-JISに変換すると文字化けする。

type
  SJISString = type AnsiString(932);
var
  sjis: SJISString;
begin
  sjis := Edit1.Text;  //=> ?

ここで、MECSUtils.MecsMappingFix_UnicodeToCP932関数の出番である。
MECSUtils ver1.54では、文字コードを変換する時にハイフンを上手にマッピングしてくれる。

sjis := MECSUtils.MecsMappingFix_UnicodeToCP932(Edit1.Text); //=> -

これでハイフンが文字化けする問題は解決した。

DEKO様、MECSUtilsの修正ありがとうございました。<(_ _)>

旧Delphi/C++BuilderからUnicodeへのマイグレーションのノウハウとして「文字列の処理にMECSUtilsを使えるところはできるだけ使う」というはどうだろう。

旧Delphi/C++BuilderからUnicodeへのマイグレーションのノウハウとして「文字列の処理にMECSUtilsを使えるところはできるだけ使う」というはどうだろう。

MECSUtilsはAnsi/Unicodeの両方に対応しているので、MECSUtilsを使っている部分に関してはAnsi/Unicodeを気にする必要がない。よね?

MECSUtils 1.50がリリースされています。

DEKOのざつだん。」によると、MECSUtils 1.50をリリースされたとのこと。

全角・半角・ひらがな・カタカナ・大文字・小文字などの変換を行う「MecsStrConv 関数」が追加されています。