C++ C+中的西班牙语字符+;Windows/Mac/iOS
我在iOS应用程序中显示西班牙语字符时遇到一些问题。代码中的所有代码都是C++,在Windows应用程序和iOS应用程序之间共享。使用Visual Studio 2010在Windows中编译(字符集为多字节)。并在Mac上使用Xcode 4.2编译 目前,代码正在使用char指针,我的第一个想法是需要切换到wchar\u t指针。然而,我注意到我想要输出的西班牙语字符在Windows中仅使用字符指针就可以很好地显示出来。这让我觉得这些字符是多字节字符集的一部分,在我准备好做一些日文、俄文、阿拉伯文等翻译之前,我不需要费劲地将所有内容更新到wchar\t 不幸的是,虽然西班牙文字符在Windows应用程序中显示属性,但一旦进入Mac/iOS,它们就不会正确显示。在那里试验wchar__t时,我发现如果我转换所有内容,它们将正确显示。但我不明白的是,希望有人能告诉我原因。。。为什么这些字符在Windows计算机上完全有效,代码相同,在Mac环境中显示为乱码(需要wchar___t) visual studio是否在幕后对我的字符指针做了Mac没有做的事情?换句话说,当我使用char指针而不是wchar\t时,微软环境是否更宽容我的架构疏忽 鉴于我已经知道我的答案是如何将字符指针转换为wchar\u t指针,那么我真正的问题是“为什么Mac需要wchar\u t,但在Windows中我可以将字符用于相同的字符?”C++ C+中的西班牙语字符+;Windows/Mac/iOS,c++,windows,macos,visual-studio-2010,xcode4.2,C++,Windows,Macos,Visual Studio 2010,Xcode4.2,我在iOS应用程序中显示西班牙语字符时遇到一些问题。代码中的所有代码都是C++,在Windows应用程序和iOS应用程序之间共享。使用Visual Studio 2010在Windows中编译(字符集为多字节)。并在Mac上使用Xcode 4.2编译 目前,代码正在使用char指针,我的第一个想法是需要切换到wchar\u t指针。然而,我注意到我想要输出的西班牙语字符在Windows中仅使用字符指针就可以很好地显示出来。这让我觉得这些字符是多字节字符集的一部分,在我准备好做一些日文、俄文、阿拉
谢谢。Mac和Windows使用不同的代码页——它们都有可用的西班牙语字符,但它们显示为不同的字符值,因此相同的字节在每个平台上的显示方式不同 在跨平台代码库中处理本地化的最佳方法是UTF8。在NSString-stringWithUTF8String:和Windows Unicode应用程序中,通过使用CP_UTF8调用MultiByteToWideChar,UTF8本机受支持。事实上,由于它是Unicode,您甚至可以使用相同的技术来处理更复杂的语言,如中文 如果可以的话,不要在跨平台代码中使用宽字符。这变得很复杂,因为wchar_t在OSX上实际上是32位宽的。事实上,这也是浪费内存的原因
所有
char
、wchar\u t
、string
或wstring
都没有附加任何编码。它们只包含编译器决定将源文件解释为的任何二进制文件。您有三个可以关闭的变量:
wchar\u t[]
文本转换为正确的UCS-4。(我希望MSVC 2010可以这样做,但据我所知,它根本不支持UTF-8。)LPWCHAR
指针)。对于旧的LPCHAR
API,它通常是“当前代码页”“,据我所知,这可能是任何事情。我认为iOS和Mac OS在内部使用UTF-16,但它们对接受和返回的内容非常明确我刚刚看到了这个答案,它为后一种选择提供了更多的理由:我认为西班牙语除了使用符合ASCII的
字符
/字符外,没有使用任何特殊字符,因此Windows可能足够聪明,可以进行字符压缩。西班牙语还使用了锐重音(')您可以使用std::wstring而不是std::string来封装诸如char/wchar\t指针之类的C内容。删除了我的答案,因为它没有回答你的问题。