如何使用任意字符串编码?
How to use an arbitrary string encoding?
我正在尝试获取一些代码来对抗一家中国公司发布的 API。我有一个规范和一些示例代码(在 Java 中),足以理解大部分正在发生的事情,但是我 运行 有一件事情我不知道该怎么做。
String ecodeform = "GBK";
String sm = new String(Hex.encodeHex("Insert message here".getBytes(ecodeform))); //test message
它是将原始字符串的十六进制表示的char数组结果创建一个字符串,以GBK格式编码(标准汉字编码,相当于英文文本的ASCII)。我可以在 Delphi 中解决大部分问题,但我不知道如何将字符串编码为 GBK,这是此 API.
特别要求的
在 SysUtils
中,有一个 TEncoding
class 带有一些内置编码,例如 UTF8
、UTF16
和“ Default”(系统默认的代码页),但我不知道如何为GBK等任意编码设置TEncoding。
有人知道如何设置吗?
您可以使用TEncoding.GetEncoding()
方法获取特定codepage/charset的TEncoding
对象,例如:
var
Enc: TEncoding;
Bytes: TBytes;
begin
Enc := TEncoding.GetEncoding(936); // or TEncoding.GetEncoding('gb2312')
try
Bytes := Enc.GetBytes('Insert message here');
finally
Enc.Free;
end;
// encode Bytes to hex string as needed...
end;
TEncoding
有一个 GetEncoding
方法。给它编码名称或编号,它将 return 一个 TEncoding
实例。
对于GBK,我想你想要的数字是936。更多见Microsoft's list of code pages。
我正在尝试获取一些代码来对抗一家中国公司发布的 API。我有一个规范和一些示例代码(在 Java 中),足以理解大部分正在发生的事情,但是我 运行 有一件事情我不知道该怎么做。
String ecodeform = "GBK";
String sm = new String(Hex.encodeHex("Insert message here".getBytes(ecodeform))); //test message
它是将原始字符串的十六进制表示的char数组结果创建一个字符串,以GBK格式编码(标准汉字编码,相当于英文文本的ASCII)。我可以在 Delphi 中解决大部分问题,但我不知道如何将字符串编码为 GBK,这是此 API.
特别要求的在 SysUtils
中,有一个 TEncoding
class 带有一些内置编码,例如 UTF8
、UTF16
和“ Default”(系统默认的代码页),但我不知道如何为GBK等任意编码设置TEncoding。
有人知道如何设置吗?
您可以使用TEncoding.GetEncoding()
方法获取特定codepage/charset的TEncoding
对象,例如:
var
Enc: TEncoding;
Bytes: TBytes;
begin
Enc := TEncoding.GetEncoding(936); // or TEncoding.GetEncoding('gb2312')
try
Bytes := Enc.GetBytes('Insert message here');
finally
Enc.Free;
end;
// encode Bytes to hex string as needed...
end;
TEncoding
有一个 GetEncoding
方法。给它编码名称或编号,它将 return 一个 TEncoding
实例。
对于GBK,我想你想要的数字是936。更多见Microsoft's list of code pages。