[英]Delphi - TStringList Save/Load to stream encoding
我正在我的项目中使用TStringList
和TMemeorySteam
。
msTmp := TMemoryStream.Create;
try
lTemp.SaveToStream(msTmp, TEncoding.Unicode);
finally
msTmp.Free;
end;
.....
lTemp := TStringList.Create;
try
lTemp.LoadFromFile(msTmp, TEncoding.Unicode);
finally
lTemp.Free;
end;
我怎么能告诉LoadFromStream()
和SaveToStream()
默认情况下我的项目中的流是UTF-16编码的,而不包括每次调用中的编码类型。 所以我只能调用LoadFromStream(msTmp)
,它将加载UTF-16编码。
当前对象的默认编码。
在对
LoadFromStream
或SaveToStream
的调用中指定nil编码时,将使用DefaultEncoding 。默认情况下, DefaultEncoding设置为
Default
。 如果LoadFromStream
或SaveToStream
需要另一个默认编码,则用户可以更改DefaultEncoding 。
但是,请注意TStrings.Encoding
属性:
在从流或文件读取期间确定的字符编码。
Encoding
是一个只读属性,包含调用LoadFromStream
或LoadFromFile
方法时检测到的字符编码的值。 如果文件或流不包含BOM(无法检测到编码值),则“Encoding
将设置为DefaultEncoding
属性中指定的值。
Encoding
用于SaveToStream
和SaveToFile
方法。
如果未给出[
LoadFromStream
]的Encoding
参数,则使用适当的编码加载字符串。 通过调用TEncoding
类的GetBufferEncoding
例程来获取编码的值。 然后,LoadFromStream
将编码值保存在Encoding
属性中,以便在保存流时使用。
因此,只要不调用LoadFrom...()
,就可以将DefaultEncoding
设置为TEncoding.Unicode
,然后调用SaveTo...()
而不指定Encoding
参数的值。
但是,一旦调用LoadFrom...()
, Encoding
属性优先于DefaultEncoding
属性,以便后续调用SaveTo...()
。 只要文件没有BOM, Encoding
属性就会匹配DefaultEncoding
属性。 但如果遇到非UTF16LE BOM,则所有投注均已关闭。
为了确保始终使用TEncoding.Unicode
,您应该继续使用LoadFrom...()
和SaveTo...()
的Encoding
参数,这就是它们存在的原因。 它们具有第一优先级,当未明确声明输入/输出编码时, (Default)Encoding
属性是回退。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.