C++ 在 Unicode 而不是 Ansi 中创建文件

标签 c++ file-io unicode fstream ansi

为什么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/

相关文章:

c++ - 使用 C++ 将二进制文件 (jpg) 读取为字符串

c++ - 无法打开存储在字符串 C++ 中的文件名

jquery - 伪元素内容的数据内容中的 Unicode

ruby - 转换已经用 UTF-8 编码的 ruby​​ 字符串中的 unicode 字符

c++ - 控制未初始化堆栈变量的填充值(例如 0xCC)?

c++ - 输出不符合预期,它应该打印 12 而不是 102

c++ - 如何修复 Mujoco CmakeLists 构建错误 "/usr/bin/ld: cannot find -lglfw"?

c++ - 如何在 boolean 值(假和真)上编写 `for` 循环

c# - 为什么当另一个进程打开文件时 TextReader 会报错?

unicode - 在大型字节序计算机上,UTF-8的字节顺序是否与小型字节序计算机上的字节顺序不同?那么为什么UTF-8不需要BOM?