我正在为一个问卷调查做一个项目。用户使用Delphi上的问题创建项目,而不是将.txt文件中的项目导出到Android,在那里读取文件并且用户可以回答。我的问题是á,à,É,Ú等字符,看起来像?在Android中,代码为65533.所以,我需要知道如何配置Android和Delphi在同一个字符集中工作。
答案 0 :(得分:8)
Android基于Linux,因此可能使用UTF-8。另一方面,Android也非常类似于Java,因此可能更喜欢UTF-16。
如果您需要该文件为UTF-8,则可以这样做,假设您的文字位于TStringList
。
StringList.SaveToFile(FileName, TEncoding.UTF8);
这将包含文件中的BOM,我认为Android不会喜欢--Windows UTF-8应用程序倾向于使用BOM,而不是Linux。如果您想在没有BOM的情况下输出,请执行以下操作:
type
TUTF8EncodingNoBOM = class(TUTF8Encoding)
public
function GetPreamble: TBytes; override;
end;
function TUTF8EncodingNoBOM.GetPreamble: TBytes;
begin
Result := nil;
end;
...
var
UTF8EncodingNoBOM: TEncoding;//make this a global variable
...
UTF8EncodingNoBOM := TUTF8EncodingNoBOM.Create;//create in a unit initialization, remember to free it
...
StringList.SaveToFile(FileName, UTF8EncodingNoBOM);
如果您发现需要UTF-16,则使用TEncoding.Unicode
表示UTF-16LE,或TEncoding.BigEndianUnicode
表示UTF-16BE。如果您需要剥离BOM,那么使用与上述相同的技术就足够了。
<强>摘要强>
TEncoding
。TStrings.SaveToFile
与TEncoding
实例一起使用。答案 1 :(得分:2)
使用Unicode。 UTF-16或UTF-8应该可以正常工作。
请参阅戴维斯的答案,了解为什么这应该有效以及如何在D2009及更新版本中进行解释。
对于Delphi 2007及更早版本,您必须使用另一种解决方案,可以使用UTF8Encode + Ansi TStringList,您也可以将字符串转换为WideStrings并使用WideStrings。
要使用D2007及更早版本编写UTF-8,请参阅此问题:
How can a text file be converted from ANSI to UTF-8 with Delphi 7?
要使用D2007编写UTF-16,您可以使用包含WideStrings
的{{1}}单元。请注意,默认情况下,此类不会写入BOM。
对于较旧的Delphi版本,还有其他WideStringList实现。