C++ 将非英文文本写入文件
c++ write non english text to a file
我看到了很多关于这个主题的问题,但其中 none 对我有帮助。
假设我有一个字符串“հայեր”或“русский”(wchat_t*
、wstring
、LPTSTR
或其他字符串)。
现在我想创建一个输出文件 "res.txt" 并写下字符串。在尝试编写它时,我最终什么也没写,“?”和文件中的一些任意数字。
有人可以建议我如何保留非英语字符串以及如何将它们正确写入文件吗?
谢谢。
您必须使用 unicode 进行编码。
这对我很有效。
#include <fstream>
#include <locale>
#include <codecvt>
const locale utf8_locale = locale(locale(), new codecvt_utf8<wchar_t>());
wofstream file(url);
file.imbue(utf8_locale);
file << L"իմբյու" << endl;
在您甚至可以开始创建包含非拉丁字符的文本文件之前,您必须确定要用于您的区域设置的编码。
例如,如果您的区域设置使用 UTF-8
编码,则字符串“русский”的编码必须与您的区域设置为 KOI8-R
时完全不同。
UTF-8
中的字符串“русский”由八位字节(字节)表示:d1 80 d1 83 d1 81 d1 81 d0 ba d0 b8 d0 b9
。对于 KOI8-R
语言环境,等效的八位字节是 d2 d5 d3 d3 cb c9 ca
.
国际化很难。
在大多数情况下,您可以使用 C++ 库的宽字符流和 unicode:
#include <iostream>
#include <locale>
int main()
{
std::locale::global(std::locale(""));
std::wcout << L"\u0440\u0443\u0441\u0441\u043a\u0438\u0439" << std::endl;
return 0;
}
希望这个输出在您的平台上是“русский”。如果可行,这可能是阻力最小的路径,但您必须查找每个字符的 unicode 值。
新的 C++ 标准也支持 UTF-8
,但这里的答案是让您花一些时间了解语言环境、unicode 和国际化的一般概念。如果不完全了解所有这些事情是如何工作的,就很难正确地做到这一点。
我看到了很多关于这个主题的问题,但其中 none 对我有帮助。
假设我有一个字符串“հայեր”或“русский”(wchat_t*
、wstring
、LPTSTR
或其他字符串)。
现在我想创建一个输出文件 "res.txt" 并写下字符串。在尝试编写它时,我最终什么也没写,“?”和文件中的一些任意数字。
有人可以建议我如何保留非英语字符串以及如何将它们正确写入文件吗?
谢谢。
您必须使用 unicode 进行编码。
这对我很有效。
#include <fstream>
#include <locale>
#include <codecvt>
const locale utf8_locale = locale(locale(), new codecvt_utf8<wchar_t>());
wofstream file(url);
file.imbue(utf8_locale);
file << L"իմբյու" << endl;
在您甚至可以开始创建包含非拉丁字符的文本文件之前,您必须确定要用于您的区域设置的编码。
例如,如果您的区域设置使用 UTF-8
编码,则字符串“русский”的编码必须与您的区域设置为 KOI8-R
时完全不同。
UTF-8
中的字符串“русский”由八位字节(字节)表示:d1 80 d1 83 d1 81 d1 81 d0 ba d0 b8 d0 b9
。对于 KOI8-R
语言环境,等效的八位字节是 d2 d5 d3 d3 cb c9 ca
.
国际化很难。
在大多数情况下,您可以使用 C++ 库的宽字符流和 unicode:
#include <iostream>
#include <locale>
int main()
{
std::locale::global(std::locale(""));
std::wcout << L"\u0440\u0443\u0441\u0441\u043a\u0438\u0439" << std::endl;
return 0;
}
希望这个输出在您的平台上是“русский”。如果可行,这可能是阻力最小的路径,但您必须查找每个字符的 unicode 值。
新的 C++ 标准也支持 UTF-8
,但这里的答案是让您花一些时间了解语言环境、unicode 和国际化的一般概念。如果不完全了解所有这些事情是如何工作的,就很难正确地做到这一点。