如何让Delphi和Android使用相同的字符集?

Vit*_*gel 2 delphi android character-encoding

我正在做一个关于问卷调查的项目.用户使用Delphi上的问题创建项目,而不是将.txt文件中的项目导出到Android,在那里读取文件并且用户可以回答.我的问题是á,à,É,Ú等字符,看起来像?在Android中,代码为65533.因此,我需要知道如何配置Android和Delphi以在同一个字符集中工作.

Dav*_*nan 8

Android基于Linux,因此可能使用UTF-8.另一方面,Android也非常类似于Java,因此可能更喜欢UTF-16.


如果您需要将文件设置为UTF-8,则可以这样做,假设您的文本为TStringList.

StringList.SaveToFile(FileName, TEncoding.UTF8);
Run Code Online (Sandbox Code Playgroud)

这将包括文件中的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);
Run Code Online (Sandbox Code Playgroud)

如果您发现需要UTF-16,则使用TEncoding.UnicodeUTF-16LE或TEncoding.BigEndianUnicodeUTF-16BE.如果您需要剥离BOM,那么使用与上述相同的技术就足够了.

摘要

  1. 找出你需要的编码及其字节序.
  2. 找一个合适的TEncoding.
  3. TStrings.SaveToFile与该TEncoding实例一起使用.