我想知道如何在C/C++中规范化字符串(包含utf-8/utf-16)。 在.NET中有一个功能String.Normalize。C/C++中的Unicode字符串规范化
我过去使用过UTF8-CPP,但它没有提供这样的功能。 ICU和Qt提供字符串规范化,但我更喜欢轻量级解决方案。
这是否有任何“轻量级”解决方案?
我想知道如何在C/C++中规范化字符串(包含utf-8/utf-16)。 在.NET中有一个功能String.Normalize。C/C++中的Unicode字符串规范化
我过去使用过UTF8-CPP,但它没有提供这样的功能。 ICU和Qt提供字符串规范化,但我更喜欢轻量级解决方案。
这是否有任何“轻量级”解决方案?
正如我在another question中写的,utf8proc是一个非常好的,轻量级的基本Unicode功能库,包括Unicode字符串标准化。
上下文中的“轻量级”表示“功能有限”。我将以ICU来源为例,并参考http://unicode.org/reports/tr15/来实现这个“轻量级”功能。
您可以用最少的(或可能没有其他数据 - 我认为所有的标准化数据现在都是内部的)构建ICU,然后进行静态链接。我最近没有尝试过,但我相信在这种情况下总体尺寸非常小。
对于Windows,有NormalizeString()
功能(不幸的是,Vista和更高版本 - 据我看到MSDN):
http://msdn.microsoft.com/en-us/library/windows/desktop/dd319093%28v=vs.85%29.aspx
这是我迄今发现走的最简单方法。 我想它也很轻巧。
int NormalizeString(
_In_ NORM_FORM NormForm,
_In_ LPCWSTR lpSrcString,
_In_ int cwSrcLength,
_Out_opt_ LPWSTR lpDstString,
_In_ int cwDstLength
);
好的UTF-8解决方案是glib的g_utf8_normalize()函数。需要将std :: wstring转换为std :: string(utf16到utf8),如果你也需要这样的wstring(这将使它成为一个相当昂贵的解决方案,因此我正在寻找一个更好的解决方案,如果可能的话纯C++(11)手段)。
我在使用utf8proc的visual studio 2010中遇到问题。 typedef unsigned char bool; - >不能用C++编译 – 2011-02-03 11:01:49