如何读取具有Unicode代码的文本文件
How do I read a text file having Unicode codes?
我使用以下代码初始化一个字符串。
std::string unicode8String = "u00C1 Mu00F3ti Su00F3l";
使用cout
打印,输出为ÁMóti Sól。
但当我使用ifstream
从文本文件中读取相同的字符串,将其存储在std::string
中并打印时,输出为\u00C1 M\u00F3ti S\u00F3l。
我的文件的内容是\u00C1 M\u00F3ti S\u00F3l,我想将其打印为ÁMóti Sól。有办法做到这一点吗?
我的头顶(完全未经测试)
std::string convert_string(const std::string& in)
{
std::string out;
for (size_t i = 0; i < in.size(); )
{
if (i + 5 < in.size() && in[i] == '' && in[i+1] == 'u' &&
in[i+2] == '0' && in[i+3] == '0' &&
isxdigit(in[i+4]) && isxdigit(in[i+5]))
{
out += (unsigned char)16*in[i+4] + (unsigned char)in[i+5];
i += 6;
}
else
{
out += in[i];
++i;
}
}
return out;
}
但是,这对于任何超过255的unicode值(例如\u1234)都不起作用,因为您的字符串存储8位字符,而unicode字符最多可以有20位。
正如我所说的完全未经测试,但我相信你会明白的。
您可以尝试使用"std::wcout
"打印吗!
unicode字符在文本文件中有不同的表示形式(没有\u)。
用于评估
int main()
{
// Write
{
std::string s = "u00C1 Mu00F3ti Su00F3l";
std::ofstream out("/tmp/test.txt");
out << s;
}
// Read Text
{
std::string s;
std::ifstream in("/tmp/test.txt");
std::getline(in, s);
std::cout << "Result: " << s << std::endl;
}
// Read Binary
{
std::ifstream in("/tmp/test.txt");
in.unsetf(std::ios_base::skipws);
std::istream_iterator<unsigned char> first(in);
std::istream_iterator<unsigned char> last;
std::vector<unsigned char> v(first, last);
std::cout << "Result: ";
for(unsigned c: v) std::cout << std::hex << c << ' ';
std::cout << std::endl;
}
return 0;
}
在带有UTF8的Linux上:结果:ÁMóti Sól结果:c3 81 20 4d c3 b3 74 69 20 53 c3 b3 6c
相关文章:
- Unicode - ICU 库 - 获取 UnicodeString 中的代码点计数
- C++基础知识(使用其他方法(Unicode?)的相同代码)
- C++Unicode:字节、代码点和图形
- 如何处理C 中Unicode支持涉及的代码重复
- 如何从 UTF-8 字符串的每个字符中获取 UNICODE 代码
- 从ASCII到Unicode字符代码的转换(FreeType2)
- 如何打印 unicode 代码点
- 使用 C++ 测试 Unicode 代码点是否在 ISO-8859-5 集中
- MultiByteToWideChar 用于 Unicode 代码页 1200、1201、12000、12001
- 如何在c++中将unicode代码点转换为utf-8
- 如何使用特定的 Unicode 代码点 RTRIM wchar_t
- 在哪里可以找到 C++ ICU Unicode 的可能代码页参数值
- 匹配 Unicode 代码点的约定,同时遵守 BOM
- 使用json_write()时有两个unicode代码点
- 在C++11中,如何打印给定Unicode代码的字符
- 如何读取具有Unicode代码的文本文件
- 如何将十六进制代码值转换为unicode字符
- 无法从虚拟键代码转换为 unicode
- Apple C++ LLVM Compiler 4.x & UNICODE:何时需要?UNICODE 是默认编译器字符集吗?使代码同时编译 ANSI 和 UNICODE 版本
- 如何使用ICU将Unicode代码点转换为C++中的字符