C# vs Delphi- 两个代码都为 ‰ 提供了不同的值

C# vs Delphi- both codes are giving different value for ‰

谁能告诉我为什么 ‰ 符号会得到不同的值? 我的 Delphi7 代码是-

k := ord('‰'); //k is of type longint; receiving k as 137

我的 C# 代码是-

k = (long)('‰');//k is of type long; receiving k as 8240

请给我一个解决方案,我怎样才能在 C# 中获得相同的值?因为Delphi代码解决了我的目的。

C# 将文本编码为 UTF-16。 Delphi 7 将文本编码为 ANSI。这就是区别所在。你不是在比较同类。

您询问如何获取该字符的 ANSI 序数值。使用 new Encoding(codepage) 获取与您的 Delphi ANSI 编码匹配的 Encoding 实例。为此,您需要知道您使用的是哪个代码页。然后在该编码实例上调用 GetBytes

例如,如果您的代码页是 1252,那么您应该这样写:

enc = new Encoding(1252);
byte[] bytes = enc.GetBytes("‰");

或者如果您想使用默认的系统 ANSI 编码,您可以使用

byte[] bytes = Encoding.Default.GetBytes("‰");

有人想知道你为什么问这个问题。在这里回答了很多问题,我想知道您是否正在执行某种加密、散列或编码,并且正在使用一些使用 AnsiString 变量作为字节数组的 Delphi 代码作为参考。在这种情况下,虽然 Encoding.GetBytes 是您所要求的,但它不是您所需要的。您需要的是停止使用字符串来保存二进制数据。使用字节数组。在 Delphi 和 C# 中。