MECSUtilsのUTF32ToUTF16で文字数が変わる

MECSUtilsのUTF32ToUTF16で文字数が変わります」とDEKOの掲示板に書き込んだら、丁寧な回答をいただきました。
ありがとうございました。

質問内容は、次のコードを実行すると文字数が変わります。というもの。

UnicodeString us = "テスト";
UCS4String ucs4 = UnicodeStringToUCS4String(us);
WideString ws = Mecsutils::UTF32ToUTF16(ucs4);
cout << us.Length() << endl; //=>3
cout << ucs4.High << endl; //=>3
cout << ws.Length() << endl; //=>4 

もともとの問題は何かというと、次のコードの結果がMECSUtils 1.41ではtrueにならなくなったこと。

UnicodeString s1 = L"テスト";
UnicodeString s2 = Mecsutils::MecsMappingFix_JISX0208ToUnicode(s1);
TEST_ASSERT(s1 == s2);

一致しない原因は、s2の長さがs1よりも長いため。

MECSUtils 1.41ではMecsMappingFix_JISX0208ToUnicode関数が内部でMecsMappingFix_JISX0213ToJISX0208関数を呼んでいる。
MecsMappingFix_JISX0213ToJISX0208関数はUTF32ToUTF16関数を使用している。
UTF32ToUTF16関数はSetLength関数で文字列長さを変更している。
UTF32ToUTF16関数が怪しい。
という考えに至ったわけです。

デブキャンでのお話が楽しみです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください