我想知道如何在C/C++中规范化包含utf-8/utf-16的字符串。
.NET中有一个名为String.Normalize的函数。
我以前使用过UTF8-CPP,但它并没有提供这样的函数。 ICU和Qt提供了字符串规范化功能,但是我更喜欢轻量级的解决方案。
是否有任何“轻量级”的解决方案呢?
我想知道如何在C/C++中规范化包含utf-8/utf-16的字符串。
.NET中有一个名为String.Normalize的函数。
我以前使用过UTF8-CPP,但它并没有提供这样的函数。 ICU和Qt提供了字符串规范化功能,但是我更喜欢轻量级的解决方案。
是否有任何“轻量级”的解决方案呢?
对于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
);
您可以使用最小的(或可能没有其他数据 - 我认为所有规范化数据现在都是内部的)构建ICU,然后静态链接。我最近没有尝试过这个,但我相信在这种情况下总大小相当小。