尝试在 C++ 中打印时超出 Unicode 范围
Unicode range exceeds when try to print in C++
我正在尝试在 C++ 中打印 Unicode 字符。我的 Unicode 字符是 Old Turkic,我有字体。当我使用一个字母的代码时,它会给我另一个字符。例如:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str = "\u10C00" // My character's unicode code.
cout << str << endl;
return 0;
}
这个片段给出了另一个字母的输出,在它的结尾后面有一个 0
。
例如,它给了我这个(假设我想打印“Ö”字母):
A0
但是当我从 ubuntu 中的字符映射应用程序复制并粘贴我的实际字母到我的源片段时,它给了我我想要的。这里有什么问题?我的意思是,我想使用字符代码方式 "\u10C00"
,但它不能正常工作。我认为这个字符串太长,所以它使用前 6 个字符并在末尾弹出 0
。我该如何解决这个问题?
std::string
并不真正支持 unicode,请改用 std::wstring
。
但即使 std::wstring
也可能有问题,因为它不支持所有尺寸。
另一种方法是使用一些外部字符串 class 例如 Glib::ustring
如果你使用 gtkmm 或 QString
对于 Qt
几乎每个 GUI 工具包和其他库都提供自己的字符串 class 来处理 unicode。
转义后/u
必须正好是4个十六进制字符。如果你需要更多,你应该使用 /U
。第二个变体需要 8 个字符。
示例:
"\u00D6" // 'Ö' letter
"\u10C00" // incorrect escape code!
"\U00010C00" // your character
我正在尝试在 C++ 中打印 Unicode 字符。我的 Unicode 字符是 Old Turkic,我有字体。当我使用一个字母的代码时,它会给我另一个字符。例如:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str = "\u10C00" // My character's unicode code.
cout << str << endl;
return 0;
}
这个片段给出了另一个字母的输出,在它的结尾后面有一个 0
。
例如,它给了我这个(假设我想打印“Ö”字母):
A0
但是当我从 ubuntu 中的字符映射应用程序复制并粘贴我的实际字母到我的源片段时,它给了我我想要的。这里有什么问题?我的意思是,我想使用字符代码方式 "\u10C00"
,但它不能正常工作。我认为这个字符串太长,所以它使用前 6 个字符并在末尾弹出 0
。我该如何解决这个问题?
std::string
并不真正支持 unicode,请改用 std::wstring
。
但即使 std::wstring
也可能有问题,因为它不支持所有尺寸。
另一种方法是使用一些外部字符串 class 例如 Glib::ustring
如果你使用 gtkmm 或 QString
对于 Qt
几乎每个 GUI 工具包和其他库都提供自己的字符串 class 来处理 unicode。
转义后/u
必须正好是4个十六进制字符。如果你需要更多,你应该使用 /U
。第二个变体需要 8 个字符。
示例:
"\u00D6" // 'Ö' letter
"\u10C00" // incorrect escape code!
"\U00010C00" // your character