将wchar_t *写入文件-仅适用于某些字符

时间:2018-09-10 08:41:12

标签: c++ wchar-t

我有一些返回unicode文本的方法,我需要将它们写到文件中,但是没有写一些字符。我有以下内容:

const wchar_t* getStandardText() {
    return L"test";
}

const wchar_t* getUnicodeText()
{
    return L"testíček";
}

int main()
{
    FILE *file = fopen(FILE_NAME, "a");

    fputws(getStandardText(), file);
    fputws(getUnicodeText(), file);

    fclose(file);
}

文件输出:

  

testtestí

让我更加困惑的是,某些字符(如“í”)有效,而另一些字符(如“č”)无效。

  • 我在Windows上使用VS 2015 Pro。
  • 为了读取文件,我使用Notepad ++,它告诉我文件具有ANSI编码。

2 个答案:

答案 0 :(得分:3)

这在Windows上有效...更改您的mode参数以具有明确的编码...

FILE *file = fopen("foobar.txt", "a+, ccs=UTF-16LE");

OR

FILE *file = fopen("foobar.txt", "a+, ccs=UTF-8");

这似乎迫使字节序标记(FF FE)指向文件标题,以指示文件的文本为Unicode。

答案 1 :(得分:1)

必须使用适当的BOM创建文件。以下是最优选的方法,并确保仅将UTF-8字符转储到文件中。并通过记事本++打开以查看它。

FILE *file = fopen("test.txt", "a+, ccs=UTF-8");