【发布时间】:2017-07-13 05:57:30
【问题描述】:
我现在花了很多时间阅读有关 Unicode、它的编码和许多相关主题的信息。
我研究的原因是因为我试图读取文件的内容并逐个字符地解析它们。
如有错误请指正:
- C++ 的
getc()返回一个int,它可能等于EOF。
如果 返回值不等于EOF它可以被解释为 一个安全地分配给char。
因为std::string是 基于char,我们可以使用这些字符构建std::strings 并使用 那些。
我有 C# 背景,我们使用 C# 的 char(16 位)作为 strings。
这些chars 的值直接映射到 unicode 值。
值为5 的char 等于位于U+0005 的Unicode 字符。
我不明白如何在 C++ 中读取包含值可能大于一个字节的字符的文件。当我只能读取值限制为一个字节的字符时,我对使用 getc() 感到不舒服。
我可能遗漏了有关如何使用 C++ 正确读取文件的要点。
非常感谢任何见解。
我正在使用 VC++ 运行 Windows 10 x64。
但如果可能的话,我更愿意让这个问题与平台无关。
编辑
我想强调一下 Klitos Kyriacou 在 cmets 中链接的堆栈溢出帖子:
How well is Unicode supported in C++11?
简要介绍了 C++ 对 Unicode 的支持程度。
有关更多详细信息,您应该阅读/观看已接受答案中提供的资源。
【问题讨论】:
-
您有机会查看
std::wstring和/或wchar_t吗? -
您希望使用什么编码?
-
@VadaPoché 让我读一下这些东西......
-
而 C#(以及 Java)在读/写操作期间会自动进行编码/解码,而在 C++ 中,您必须将字节读取为字节,然后使用 std::codecvt。另见问题How well is Unicode supported in C++11?。
-
这些字符的值直接映射到 unicode 值。 - 您知道 16 位数据类型不能容纳完整的 unicode 范围吗?