使用 CodeGear C++ Builder 2009 将 unicode 字符串写入文件

Posted

技术标签:

【中文标题】使用 CodeGear C++ Builder 2009 将 unicode 字符串写入文件【英文标题】:Write unicode string into file with CodeGear C++ Builder 2009 【发布时间】:2009-08-18 01:17:43 【问题描述】:

我刚从 Builder 6 切换到 Builder 2009,有一个问题。

如何将 unicode 字符串写入文件?

TBytes Preamble1 = TEncoding::Unicode->GetPreamble();
UnicodeString str1("string1");
int len = TEncoding::Unicode->GetByteCount(str1);

FileWrite( iFile,&Preamble1[0],Preamble1.Length );

FileWrite( iFile,str1.c_str(),len );

这就是我现在正在做的,但我想应该有一些本地方式。 顺便说一句,是否可以获取一次 Preamble 并假设在应用程序生命周期内它不会改变?从 UnicodeString 的可用文档看来,它总是 UTF-16 LE

【问题讨论】:

CodeGear C++ 不支持标准 C++ 库吗?为什么不使用 std::wstring 和 std::ofstream 来完成这项工作? 您能否提供一个工作示例?我从来没有使用过 unicode stl 函数,只有普通函数。 【参考方案1】:

我的第一个问题是“什么样的文件”?

假设它是一个文本文件而不是二进制文件,你想在输出中使用什么样的编码? UTF-8 通常是一个不错的选择,因为它被记事本之类的东西支持,而且对于普通的“拉丁”字符,没有开销。

就个人而言,要编写“简单”文本文件,我只需将字符串添加到 TStringList,然后使用 SaveToFile 方法。

TStringList *list = new TStringList;
list->Add(str1);
list->Add(str2);
...
list->SaveToFile(filename, TEncoding::UTF8);

【讨论】:

好答案。谢谢。是的,我问的是简单的文本文件。我的主要目标是实现 unicode 日志记录,所以我最终编写了简单的模板类,它使用选定的编码类型(UTF-8、UTF-16 BE/LE)打开文件,然后在它们进入时使用 FileWrite 输出。但是对于一次写动作,你的选择似乎是最好的。

以上是关于使用 CodeGear C++ Builder 2009 将 unicode 字符串写入文件的主要内容,如果未能解决你的问题,请参考以下文章

Embarcadero C++ builder 10.4.2-附加到进程在 64 位上不起作用

构建遗留 Turbo C++ 代码

C++ Builder6.0中的GroupBox与RadioButton使用问题

在 C++ Builder 中使用带有 BLOB 字段的图像和数据

C++ Builder 2009 - 简单的整数列表

SQLDirect 6.5 Source (Delphi 5-10.1 Berlin)