WeG*_*ars -1 delphi unicode delphi-xe7
我想在Delphi中实现一个非常基本的任务:将字符串保存到磁盘并加载回来.这似乎是微不足道的,但是自从我升级到IOUtils之后我做了这个TWICE就遇到了问题(之前还有一次......这就是为什么我把'辉煌'的决定升级到IOUtils).
我使用这样的东西:
procedure WriteToFile(CONST FileName: string; CONST uString: string; CONST WriteOp: WriteOperation);
begin
if WriteOp= (woOverwrite)
then IOUtils.TFile.WriteAllText (FileName, uString) //overwrite
else IOUtils.TFile.AppendAllText(FileName, uString); //append
end;
Run Code Online (Sandbox Code Playgroud)
简单吧?怎么可能出错?好吧,我最近在IOUtils中遇到了另一个(另一个)错误.所以,TFile是错误的.该缺陷详述这里.
任何人都可以分享一个不是基于IOUtils的替代方案(或仅仅是你的想法/想法)并且它已知可行吗?嗯......上面的代码也为我工作了一段时间......所以,我知道如果难以保证一段代码(无论多小)将真正起作用!
另外,我真的希望让我的WriteToFile过程在可能的情况下将字符串保存到ANSI文件(uString仅包含ANSI字符),否则为Unicode.
然后ReadAFile函数应自动检测编码并正确读回字符串.
我们的想法是,仍有文本编辑器会错误地打开/解释Unicode/UTF文件.因此,只要有可能,请向用户提供一个好的旧ANSI文本文件.
所以:
- 覆盖/追加
- 尽可能保存为ANSI
- 内存效率(当加载文件为2GB时不要吃4GB内存)
- 应该使用任何文本文件(最多2GB,显然)
- 没有IOUtils(太小车有用)
然后ReadAFile函数应自动检测编码并正确读回字符串.
这是不可能的.如果解释为任何文本编码,则存在格式良好的文件.例如,请参阅Notepad文件编码问题,redux.
这意味着您的目标无法实现,您需要更改它们.
我的建议是做以下事情:
不理解UTF-8的文本编辑器不值得支持.如果您有意愿,请在创建文件时包含UTF-8 BOM.使用TEncoding.UTF8.GetBytes和TEncoding.UTF8.GetString编码和解码.
| 归档时间: |
|
| 查看次数: |
1037 次 |
| 最近记录: |