使用 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 位上不起作用
C++ Builder6.0中的GroupBox与RadioButton使用问题