在 Windows 上使用 C++ 将希伯来语字符串放入变量中
Putting Hebrew string in a variable using C++ on Windows
我无法将希伯来语字符串放入这样的变量中:
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 这样的库来保存、加载... - 通常所有关于字符串的操作。
我无法将希伯来语字符串放入这样的变量中:
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 这样的库来保存、加载... - 通常所有关于字符串的操作。