gpt4 book ai didi

c++ - 从 NFD 到 NFC 的 OSX 和 C++ unicode 转换

转载 作者:搜寻专家 更新时间:2023-10-31 01:10:31 32 4
gpt4 key购买 nike

我从 OSX 文件系统获取的 NFD Unicode 字符串有问题。

这是我在 OSX“A\xcc\x88”上得到的“Ä”-元音变音符号,这是我期望的“\xc3\x84”。相同的功能在 Windows 下执行(简单的提升文件系统操作,列出目录)。

搜索了一段时间后,我发现 Apple 的 NFD 编码为 UTF-8 和世界其他地方的 NFC。我尝试了一些通过 NSStrings 或 boost::locale::normalize 进行转换,但没有成功。

有人知道在 C++ 中执行此操作的方法吗(如有必要,我可以通过 obj-c 使用 Cocoa)?

之后我希望将原始 unicode 字符串作为 std::string(使用 unicode 编码)。

最佳答案

这是获取预组合形式的解决方案。

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

关于c++ - 从 NFD 到 NFC 的 OSX 和 C++ unicode 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15906344/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com