我在使用 glib::ustring 的日语中遇到字符宽度问题。
我有这个字符串:ウェッジパンプス
我想把它转换成:ウエッシパンプス
使用 ustring::normalize,我得到这个字符串:ウェッジパンプス (实际上,在这里,每个带重音的字符填充两个字符宽度)
有没有标准的方法来做这种处理?ICU在这方面做得更好吗?
我需要将日文字符串转换为两种格式之一,因为半角字符串与全角字符串不同。
有 LCMapString 可以在半角/全角平假名/片假名之间进行转换
AnsiString text = "変換する文字列"; //input text
//変換方法 how to convert
DWORD flags = LCMAP_FULLWIDTH; //全角文字にします。flag to convert to full width
//DWORD flags = LCMAP_HALFWIDTH; //半角文字にします)。to half width
//DWORD flags = LCMAP_HIRAGANA; //ひらがなにします。to hiragana
//DWORD flags = LCMAP_KATAKANA; //カタカナにします。to katakana
const int size = text.Length() * 2 + 1;
char* s = new char[size];
try
{
ZeroMemory(s, size);
LCMapString(GetUserDefaultLCID(),
flags,
text.c_str(),
text.Length() + 1,
s,
size);
AnsiString newtext = s; //変換した文字列 converted text
return newtext;
}
参考: