我遇到了从OSX文件系统获得的NFD Unicode字符串的问题。
这就是我在OSX“A \ xcc \ x88”上获得的“Ä”-Umlaut,这就是我所期望的“\ xc3 \ x84”。 Windows下的功能相同(简单的boost文件系统操作,列出目录)。
经过一段时间的搜索,我发现Apple的NFD编码为UTF-8和世界其他地区的NFC。我尝试过使用NSStrings或使用boost :: locale :: normalize进行转换,但没有成功。
有没有人知道在C ++中这样做的方法(如果需要,我可以通过obj-c使用Cocoa)?
之后我希望原始的unicode字符串为std :: string(带有unicode编码)。
答案 0 :(得分:2)
NSString有 - (NSString *)precomposedStringWithCanonicalMapping函数,以及其他一些函数,看起来他们会帮助你。
答案 1 :(得分:2)
这是获得预先组合形式的解决方案。
std::string precomposeFilename(const std::string& name)
{
CFStringRef cfStringRef = CFStringCreateWithCString(kCFAllocatorDefault, name.c_str(), kCFStringEncodingUTF8);
CFMutableStringRef cfMutable = CFStringCreateMutableCopy(NULL, 0, cfStringRef);
CFStringNormalize(cfMutable,kCFStringNormalizationFormC);
char c_str[255 + 1];
CFStringGetCString(cfMutable, c_str, sizeof(c_str)-1, kCFStringEncodingUTF8);
CFRelease(cfStringRef);
CFRelease(cfMutable);
return std::string(c_str);
}