日本半/全宽转换

时间:2010-07-12 10:24:26

标签: c++ c glib

我使用glib :: ustring在日语中面临字符宽度问题。

我有这个字符串:ウェッジパンプス

我想将其转换为:ウエッシパンプス

使用ustring :: normalize,我得到这个字符串:ウェッジパンプス(事实上,这里,每个带有重音的字符填充两个字符宽度)

有没有标准的方法来进行这种处理? ICU是否更擅长这样做?

我需要将日语字符串转换为两种格式之一,因为半宽的字符串与全宽字符串不同。

1 个答案:

答案 0 :(得分:1)

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;
}

REF: