【问题标题】:File write with Encoding in C++ Builder在 C++ Builder 中使用编码写入文件
【发布时间】:2014-10-23 02:26:21
【问题描述】:

我的环境:Windows7 pro(32 位)上的 RadStudio XE4 Update1。

当我们想用 Encoding 写文件时,API 是什么?

我发现TStreamWriter.Create(FileName, ..., TEncoding.GetEncoding(...)) 是一种选择。 这是平时用的吗?

我还找到了带有编码的TStringList.SaveToFile()

我试图找到为FileOpen()/Filewrite()指定编码的方法,但没有找到相关信息。

【问题讨论】:

    标签: c++ file-io character-encoding c++builder


    【解决方案1】:

    AssignFile 函数。在 XE 中,它有一个可选的 CodePage 参数,用于设置输出文件的代码页(参见 https://stackoverflow.com/a/14243866/3235496)。

    TStringStream::Create 方法也接受 TEncoding 参数。 虽然TStringList 是面向行的,但TStringStream 类对于读/写字符串blob 非常有用(请参阅https://stackoverflow.com/a/6397914/3235496)。

    这些应该涵盖许多典型的用例。

    FileOpen() / FileWrite() 是较低级别的文件访问例程。 Embarcadero 不鼓励使用非原生 Delphi 语言文件处理程序,对于正常的文件操作,他们建议使用 AssignFileRewriteReset

    编辑

    如果可能的话,无论如何我都会使用TStringStream / TStringList 解决方案。

    【讨论】:

    • FileOpen()/FileWrite() 由 Delphi RTL 提供(它们在 SysUtils 单元中)。 AssignFile()Rewrite()Reset() 是旧的 Pascal 式 I/O 函数,这些是你不应该再使用的函数,Embarcadero 不鼓励它们。
    • @manlio:非常感谢您的评论。这些链接也有助于理解。
    • @Remy Lebeau:感谢您的评论。我可能错过了重点。你说,我们不应该再使用AssignFile()、Rewrite()、Reset()了吗?
    • @sevenOfNine:是的,这就是我要说的。它们是遗留的,已弃用,被其他几种 RTL 替代品取代。
    • @RemyLebeau:那么,我可能会使用 TStreamWriter / TStringStream 而不是使用较低级别的文件访问例程。
    猜你喜欢
    • 1970-01-01
    • 2011-05-22
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 2018-02-19
    • 1970-01-01
    相关资源
    最近更新 更多