相关疑难解决方法(0)

什么是Windows等效的en_US.UTF-8语言环境?

如果我想在Windows上进行以下工作,那么正确的语言环境是什么?如何检测它实际存在: 此代码是通用的,还是仅仅是我的系统?

c++ unicode locale utf-8

15
推荐指数
4
解决办法
2万
查看次数

如何在C中打开具有中文文件名的文件?

出于某些原因,我需要在文件名(C语言)中编写具有中文字符的文件.例如:

#include<stdio.h>
#include<stdlib.h>
FILE *fout;
int main(){
    fout = fopen("???.txt", "w");
    fprintf(fout, "Jobs");
    //Do something...
}
Run Code Online (Sandbox Code Playgroud)

没有错误,但是没有创建文件.我想知道如何解决这个问题.谢谢!
操作系统是Windows 8.1,但可以接受Linux解决方案.

c unicode file

12
推荐指数
0
解决办法
79
查看次数

使用非MSVC编译器在Windows下打开带有Unicode文件名的文件的fstream

当文件名是"Unicode"文件名时,我需要打开一个文件作为std :: fstream(或实际上任何其他std :: ostream).

在MSVC下我有非标准的扩展名std::fstream::open(wchar_t const *,...)?我可以用其他编译器做什么,比如GCC(最重要的)和Borland编译器.

我知道CRTL提供_wfopen但是它提供了C FILE *接口而不是io-stream,也许有一种非标准的方法来创建io-stream FILE *?有没有boost::ifstream像MSVC一样的Windows扩展?

c++ windows unicode gcc wide-api

10
推荐指数
2
解决办法
9345
查看次数

std::filesystem::path::u8string 可能不会返回有效的 UTF-8?

考虑在 Linux 系统上运行的这段代码(编译器资源管理器链接):

#include <filesystem>
#include <cstdio>

int main()
{
    try
    {
        const char8_t bad_path[] = {0xf0, u8'a', 0};  // invalid utf-8, 0xf0 expects continuation bytes
        std::filesystem::path p(bad_path);

        for (auto c : p.u8string())
        {
            printf("%X ", static_cast<uint8_t>(c));
        }
    }
    catch (const std::exception& e)
    {
        printf("error: %s\n", e.what());
    }
}
Run Code Online (Sandbox Code Playgroud)

它故意std::filesystem::path使用具有不正确的 UTF-8 编码的字符串构造一个对象(0xf0 开始一个 4 字节字符,但'a'不是连续字节;更多信息请参见此处)。

调用时u8string,不抛出异常;我发现这令人惊讶,因为cppreference 的文档指出:

  1. u8string() 的结果编码始终为 UTF-8。

检查LLVM 的 libcxx 的实现,我发现确实没有执行验证 - 内部保存的字符串 …

c++ character-encoding c++20

5
推荐指数
1
解决办法
1068
查看次数

完全安全的覆盖保存文件的方法?

使用cstdio,覆盖文件的最安全方法是什么?在这种情况下,“安全”意味着文件不可能不完整或损坏;该文件将被完全覆盖,或者如果出现问题,它将是旧文件。

我想最好的方法是创建一个临时中间文件,然后在该中间文件完成后覆盖旧文件。如果这实际上是最好的方法,那么还有一些其他问题似乎是可能的,尽管很少见。

  • 如果程序在覆盖时退出,我怎么知道要使用这个其他文件?
  • 如果程序在创建过程中退出,我怎么知道不使用其他文件?
  • 我怎么知道原始文件或中间文件处于未定义状态(因为它可能以一种保持可读的方式失败,但它包含的数据有细微的错误)?

我想这有一个很好的做法,但我找不到它。这是用于保存的游戏数据;只有一个文件,而且每次都会覆盖整个文件,无需担心部分覆盖或附加。

c++ file save

3
推荐指数
1
解决办法
2468
查看次数

标签 统计

c++ ×4

unicode ×3

file ×2

c ×1

c++20 ×1

character-encoding ×1

gcc ×1

locale ×1

save ×1

utf-8 ×1

wide-api ×1

windows ×1