将每个可能的char写入文件

时间:2015-06-24 19:38:16

标签: c++ unicode char fstream

我想将存在的每个字符都写入文件中。我想unicode有最完整的字符集,但我不能说。你能帮我解决这个问题吗?我在C ++工作。这段代码似乎“只”写了一组ASCII字符(或者我错了吗?)。谢谢你的帮助。

#include <iostream>
#include <fstream>

using namespace std;

int main(void) {

wofstream wOutStream;
wOutStream.open("myFile.txt");

wchar_t myChar = 0;
do {
    wOutStream << myChar << " ";
    myChar++;
} while (myChar != 0);

wOutStream.close();

cin.get();
return 0;
}

1 个答案:

答案 0 :(得分:0)

这是一个相当开放的问题,确切的答案取决于你有多雄心勃勃。所以我不会发布一个程序,只列出基本步骤:

  • Unicode将字符分配给数字(称为代码点),例如“A”分配给nr 65,通常以十六进制写为U + 0041。它还定义了名称和许多其他属性。例如,“A”被称为“LATIN CAPITAL LETTER A”,它的小写版本是“a”,它是从左到右语言等的一部分。

  • 但就它本身而言,指定该字符如何写入文件。为此,你必须选择一个编码。常见的编码是UTF-8,应该很容易找到将代码点编码为字节的代码。如果您打开文本文件,那么您的编辑器也需要了解该编码(对于UTF-8来说不应该是一个问题)。

  • 特别是对于C ++,在编写UTF-8时,我会打开一个窄输出流(std::ofstream)并写入字节。 C ++原则上不支持编写Unicode文件。你的程序大致如此。

    for (unsigned int codePoint = 0; codePoint < 0x110000; ++codePoint)
    {
        std::string utf8 = encode_utf8(codePoint);
        outStream << utf8 << " ";
    }
    

    也许每256个字符左右添加一个换行符。

  • 有17个 plane 的2 ^ 16个代码点。许多常用字符都在第一个平面上。您可以只打印第一个平面(U + 0000到U + FFFF),或打印所有代码点(U + 0000到U + 10FFFF)。有些飞机还没有指定角色。

  • 您是否只想打印指定的代码点?在这种情况下,您必须从Unicode联盟下载列表并解析它。没有公式可以产生分配的代码点。或者像其他人指出的那样,你可以使用内置这些表的语言,比如Python或Java。

  • 最后,一些范围是为私人使用保留的。您也可以选择跳过这些内容。