Delphi 用中文显示语言在Windows中使用TStringList?

Delphi 用中文显示语言在Windows中使用TStringList?,delphi,delphi-xe2,Delphi,Delphi Xe2,如何使我的程序与非英语Windows区域(如中文)兼容 我的程序是用Delphi XE2编译的,它加载的签名文件包含一些散列 DB.txt包含基数类型数据: 5654564534 8674534664 我将TStringList与TEncoding.Default一起使用,以加载文件并将散列存储在数组(基数)中 在此之前,程序工作正常,但在Windows中使用中文显示语言执行程序时,数组包含无效哈希 我尝试了TenCodeding.Unicode和其他属性,然后我的程序在使用英语显示语言的Wi

如何使我的程序与非英语Windows区域(如中文)兼容

我的程序是用Delphi XE2编译的,它加载的签名文件包含一些散列

DB.txt包含基数类型数据:

5654564534
8674534664
我将TStringList与TEncoding.Default一起使用,以加载文件并将散列存储在数组(基数)中

在此之前,程序工作正常,但在Windows中使用中文显示语言执行程序时,数组包含无效哈希

我尝试了TenCodeding.Unicode和其他属性,然后我的程序在使用英语显示语言的Windows中无法运行!我应该在使用TEncoding.Unicode之前先检测BOM吗

什么类型的编码使我的程序可以在Windows中同时运行英文和中文显示语言


谢谢

请出示一张照片。就目前而言,问题中没有任何东西可以解释任何不同的行为。您的文件只包含ASCII字符,因此
TEncoding。默认值可以。问题可能出在从字符串转换为哈希的函数中。也许。但我们不得不猜测。因此,请提供一个并消除疑问。
TEncoding.Default
表示操作系统默认的Ansi代码页。虽然大多数Windows代码页都支持7bit ASCII字符,但我并不总是相信这一点。我遇到了一些奇怪的代码页,这些代码页不好用。UTF-8在设计上与7bit ASCII兼容,所以我会选择使用
TEncoding.UTF8
。@Remy所有Windows代码页都包含7位ASCII@DavidHeffernan:我以前也这么认为,直到我开始遇到需要使用基于EBCDIC的代码页的情况,这些代码页不能以“正常”的方式实现ASCII。并非所有EBCDIC中<$80的字节值在ASCII中都是相同的值。例如,在cp1026中,LF是$25而不是$0A,并且$0A映射到代码点U+008E而不是U+000A。这破坏了我的一些代码,这些代码从流/套接字读取CRLF分隔行,其中CRLF使用与解码行其余部分相同的代码页进行编码。我不得不更改代码,使用硬编码的$0D$0A来读取这些行。@Remy,它们不是Windows代码页。从某种意义上说,语言环境不能设置为这样的代码页。据我所知,请出示证件。就目前而言,问题中没有任何东西可以解释任何不同的行为。您的文件只包含ASCII字符,因此
TEncoding。默认值可以。问题可能出在从字符串转换为哈希的函数中。也许。但我们不得不猜测。因此,请提供一个并消除疑问。
TEncoding.Default
表示操作系统默认的Ansi代码页。虽然大多数Windows代码页都支持7bit ASCII字符,但我并不总是相信这一点。我遇到了一些奇怪的代码页,这些代码页不好用。UTF-8在设计上与7bit ASCII兼容,所以我会选择使用
TEncoding.UTF8
。@Remy所有Windows代码页都包含7位ASCII@DavidHeffernan:我以前也这么认为,直到我开始遇到需要使用基于EBCDIC的代码页的情况,这些代码页不能以“正常”的方式实现ASCII。并非所有EBCDIC中<$80的字节值在ASCII中都是相同的值。例如,在cp1026中,LF是$25而不是$0A,并且$0A映射到代码点U+008E而不是U+000A。这破坏了我的一些代码,这些代码从流/套接字读取CRLF分隔行,其中CRLF使用与解码行其余部分相同的代码页进行编码。我不得不更改代码,使用硬编码的$0D$0A来读取这些行。@Remy,它们不是Windows代码页。从某种意义上说,语言环境不能设置为这样的代码页。据我所知。
SL.LoadFromFile(Path, TEncoding.Default);
SetLength(myCardinalArray, SL.Count - 1);
for i := 1 to SL.Count - 1 do
begin
myCardinalArray[i - 1] := strtoint64(SL[i]);
end;