c++ - 日本半/全角转换

标签 c++ c glib

我在使用 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;
}

引用:

关于c++ - 日本半/全角转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3227617/

相关文章:

c++ - 类成员是否保证在内存中是连续的?

c - argv 在 C 中从控制台输入读取 * 字符时遇到问题

C 指针输出,不是我期望的

c - 为什么在glib2.0中切片分配器比malloc慢?

sh - 在 Vala 中执行外部命令不会返回所需的数据

c++ - 派生值或附加属性的方法?

c++ - 管道 boost::iostreams 没有任何输出

c++ - copy_backward 还是用 reverse_iterators 复制?

c++ - 无法在 C++ 服务器应用程序上归档 iphlpapi.lib

linux - D-Bus、UDisk 和 Glibmm 的绑定(bind)