c++ - 在 Windows 上使用 C++ 将希伯来语字符串放入变量中

标签 c++ unicode hebrew

我在将希伯来语字符串放入这样的变量时遇到问题:

wchar_t* hebrewString = L"א";

א 的 unicode 值是十六进制的 0x05d0 或十进制的 1488。

问题是我的内存显示完全不相关的不同值 到 א 的实际值。

如果我写:

wchar_t hebrewChar = 0x05d0 

很明显,正确的值将在 hebrewChar 中,但我想编写常规字符串。

我想也许我做错了什么,所以我查看了生成的 ASM 代码,甚至那里的值也是错误的。

如何简单地编写希伯来字符串?


编辑 1:

添加源码(上面注释中的代码是程序集)

wchar_t d = 0x05D0;
// DB 0f3H, 05H, 090H, 00H, 00H, 00H
wchar_t *test = L"א";
// mov  eax, 1523               ; 000005f3H
wchar_t test1 = L'א';
// mov  eax, -112               ; ffffff90H
char test2 = 'א';

最佳答案

通过在字符串或 Unicode 字符前指定 L,编译器会将其转换为与保存的编码文件匹配的编码。因此,您必须通过FILE -> Advance Save Options 更改文件编码,并选择带有签名的 UTF 8 - 例如代码页 65001

另请记住,Windows 控制台无法打印所有 Unicode 字符(如果您有不同的默认语言和编码,则可以)。

这里还有一个示例,通过将字符保存到文本文件来查看您的代码是否正常工作:

#include <iostream>
#include <fstream>

using namespace std;


int main()
{
    // UCS-2 little endian text file magic number
    char magic_number[] = { 0xFF, 0xFE };    
    wchar_t unicode_char = L'א';
    wchar_t unicode_val = 0x05d0;

    if (unicode_char == unicode_val)
        cout << "Works!" << endl;

    ofstream f("out.txt", ios::out);

    f.write(magic_number, 2);
    f.write((char *)&unicode_char, 2);
    f.close();

    return 0;
}

打开文件并检查值是否打印正确。 否则为了在代码中存储非 ANSI 字符,我强烈建议使用像 ICU 这样的库。用于保存、加载... - 通常是关于字符串的所有操作。

关于c++ - 在 Windows 上使用 C++ 将希伯来语字符串放入变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32883061/

相关文章:

C++ 初始化动态数组元素

c# - 仅接受波斯字符的正则表达式

c# - URL unicode参数解码C#

mysql - 这个网站是如何修复编码的?

javascript - 在 Mac 上的 Chrome 中查看希伯来语字体时出现问题

c++ - map 中过期的 weak_ptr 会发生什么

c++ - Windows : Invalid function argument when run from GDB 上的 QT

c++ - C++0x 中没有 Unicode 流?为什么?

c++ - CMapStringToString 无法处理 Unicode?

ruby-on-rails - 具有非拉丁字符的 Rails 友好 ID