为什么C++,如果你试图在文件中写这样的结构就创建一个Unicode文件? 部分代码:
struct stEjemplo
{
char cadena1[9];
char cadena2[9];
};
写下我在 cadena1 中写的内容,cadena2 在文件中显示类似这样的内容:
㈱㐳㘵㠷㠀㘷㐵㈳o
例子:
fstream file("File.dat");
if(!file.is_open())
{
file.open("File.dat", ios::in | ios::out | ios::trunc);
}
stEjemplo somest = {0};
strcpy(somest.origen, "SomeText");
strcpy(somest.destino, "SomeText");
file.clear();
file.seekg(0,ios::beg); //ios::end if existing information
file.write(reinterpret_cast< char*>(&somest), sizeof(stEjemplo));
file.close();
结果如下:
潓敭敔瑸匀浯呥硥t
注意词尾的“t”(是第二个“SomeText”的词尾的“t”)
但如果我的结构是:
struct stEjemplo
{
int number; //then I assign 1324
char cadena1[9];
char cadena2[9];
};
结果:, SomeText SomeText
或
struct stEjemplo
{
bool x; //then I assign true o false
char cadena1[9];
char cadena2[9];
};
会产生类似这样的结果:SomeText SomeText
编辑:
如果十六进制编辑器中的 00(NULL 字符)设置在奇数位置(从 0 开始,例如:1、3、5、7、9 等)我有问题,但是如果设置了 00在成对的位置,并且前面没有另一个00,问题就解决了。
最佳答案
您在文本编辑器中以 UTF-16LE 格式打开 File.dat
,但显然不是,以纯 ASCII 或 UTF-8(甚至使用十六进制编辑器)打开它,然后你应该看到字符串。
潋敭叠瑭絵硥硥t对应的UTF-16LE序列
53 6F 6D 65 54 65 78 74 00 53 6F 6D 65 54 65 78 74 00
猜猜当以纯 ASCII/UTF-8 读取时这是什么?
关于C++ 在 Unicode 而不是 Ansi 中创建文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24523508/