c ++将非英语文本写入文件

时间:2016-07-18 12:13:56

标签: c++ string fstream wchar-t wstring

我看到了很多关于这个话题的问题,但没有一个问题对我有帮助。

假设我有一个字符串“հայեր”或“русский”(wchat_t*wstringLPTSTR或其他内容。

现在我想创建一个输出文件“res.txt”并将字符串写下来。在尝试写作时,我最终没有写任何东西,'?'以及文件中的一些任意数字。

有人可以建议我如何保留非英语字符串以及如何正确地将它们写入文件?

感谢。

3 个答案:

答案 0 :(得分:2)

在开始创建包含非拉丁字符的文本文件的任务之前,您必须确定要用于您的语言环境的编码。

例如,如果您的语言环境使用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

国际化很难。

在大多数情况下,您可以使用带有unicode的C ++库的宽字符流:

#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和国际化的一般概念。如果不完全理解所有这些事情的运作方式,就很难做到这一点。

答案 1 :(得分:0)

您必须使用unicode进行编码。

答案 2 :(得分:0)

这对我很有帮助。

    public class ClientController : ApiController
{
    private IRepository _repo;

    public ClientController(IRepository repo)
    {
        _repo = repo;
    }

    public IQueryable<Client> Get()
    {
        return _repo.GetAllClients();
    }

    public IQueryable<Client> Get(bool includeDetails)
    {
        IQueryable<Client> query;

        if (includeDetails)
        {
            query = _repo.GetAllClientsWithDetails();
        }
        else
        {
            query = _repo.GetAllClients();
        }

        return query;
    }

    public Client Get(int id)
    {
        return _repo.GetClient(id);
    }

}