【问题标题】:C++ File Reading Library - ANSI and UnicodeC++ 文件阅读库 - ANSI 和 Unicode
【发布时间】:2009-06-18 12:13:28
【问题描述】:

我在这里阅读了一些关于阅读 Unicode 文件等的答案,大多数人指向 UTF8-CPP 或 iconv。

我发现的库都不适用于 ANSI 和 Unicode 文件,理想情况下,我想要一个函数,我将文件名传递给它,它将返回该文件的内容,而编码是什么无关紧要,或者这不可能吗?

如果有的话,我会怎么做?

【问题讨论】:

  • 不可能 100% 保证自动检测文件编码的圣杯。有算法可以猜测,但它们不是 100% 可靠的。

标签: c++ unicode file-io


【解决方案1】:

嗯,那不是二进制读取吗?所有其他形式都是解释问题,然后确切的编码等变得很重要。

虽然由于 BOM 的原因,在某些情况下可以自动检测 unicode,但并不总是存在,因此检测机制失败就等于程序损坏。我想这就是为什么大多数人不这样做的原因。

【讨论】:

    【解决方案2】:

    如果您使用的是宽字符串,UTF8-CPP 可以检测 UTF8(utf8::is_valid 和 utf8::find_invalid)并进行转换(utf8::utf16to8)。效果很好,有什么问题?

    【讨论】:

      【解决方案3】:

      您可以使用多种技术的组合:

      通常,大多数 Unicode 文件以 BOM 开头。这意味着如果文件以0xfffe0xfeff 开头,您可能 假定它是Unicode。使用 UTF-32 AFAIK 的人不多,但您仍然可以使用 BOM 方法进行猜测(参考 Wiki 页面)。

      如果是 UTF-8 文件,您可以使用 UTF8-CPP 将其转换为 UTF-16 (wstring)。如果它是 UTF-16 文件,则使用标准库可能难以阅读。具体可以参考我的博文:

      http://cfc.kizzx2.com/index.php/reading-a-unicode-utf16-file-in-windows-c/

      对于 UTF-32 -- 不知道有没有人用过,所以没经验 :P

      【讨论】:

        猜你喜欢
        • 2016-12-22
        • 1970-01-01
        • 2017-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多