冥界3大法王 发表于 2020-6-23 17:06

delphi如何将“分析模块”四个汉字转为16进制的utf-8

delphi如何将“分析模块”四个汉字转为16进制的utf-8
结果为:EFBBBFE58886E69E90E6A8A1E59D97

不苦小和尚 发表于 2020-6-23 18:49

本帖最后由 不苦小和尚 于 2020-6-23 18:51 编辑

str1:='分析模块';
   str2 := UTF8Encode(str1);
   ShowMessage(StringToHex(str2));



结果应该是这个吧

冥界3大法王 发表于 2020-6-23 19:45

不苦小和尚 发表于 2020-6-23 18:49
str1:='分析模块';
   str2 := UTF8Encode(str1);
   ShowMessage(StringToHex(s ...

@不苦小和尚
结果不对!被坑了。

结果为:EFBBBFE58886E69E90E6A8A1E59D97 才对。

不苦小和尚 发表于 2020-6-23 19:53

冥界3大法王 发表于 2020-6-23 19:45
@不苦小和尚
结果不对!被坑了。



你用在线的转换一下就知道对不对了

冥界3大法王 发表于 2020-6-23 19:55

本帖最后由 冥界3大法王 于 2020-6-23 19:58 编辑

不苦小和尚 发表于 2020-6-23 19:53
你用在线的转换一下就知道对不对了@不苦小和尚
不用试,你的代码不对
我是借notepad++,utf-8,winhex中复制来的16进制结果
已经汉化了x32dbg的插件。

少了字头的三个字节

冥界3大法王 发表于 2020-6-23 20:02

而且还没有StringToHex这个函数

在回忆中 发表于 2020-6-23 20:03

本帖最后由 在回忆中 于 2020-6-23 20:05 编辑

答案是没有错误的,所有采用UTF-8格式编码的文件的文件头三个字节用16进制表示是EFBBBF,因此在读取UTF-8格式文件的时候,需要去掉这个文件头。

冥界3大法王 发表于 2020-6-23 20:07

在回忆中 发表于 2020-6-23 20:03
答案是没有错误的,所有采用UTF-8格式编码的文件的文件头三个字节用16进制表示是EFBBBF,因此在读取UTF-8格 ...

@在回忆中
我需要加回去的代码

不苦小和尚 发表于 2020-6-23 20:15

function StringToHex(str: string): string;
var
   i : integer;
   s : string;
begin
   for i:=1 to length(str) do begin
       s := s + InttoHex(Integer(str),2);
   end;
   Result:='EFBBBF'+s;
end;

冥界3大法王 发表于 2020-6-23 20:25

不苦小和尚 发表于 2020-6-23 20:15
function StringToHex(str: string): string;
var
   i : integer;

unit Unit2;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
Vcl.StdCtrls;

type
TForm2 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
private
    { Private declarations }
public
    { Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.dfm}
function StringToHex(str: string): string;
var
i: integer;
s: string;
begin
for i := 1 to length(str) do
begin
    s := s + InttoHex(Integer(str), 2);
end;
Result := 'EFBBBF' + s;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
ShowMessage(StringToHex(UTF8Encode(Edit1.Text)));
end;

end.

结果还是有问题啊。
页: [1] 2
查看完整版本: delphi如何将“分析模块”四个汉字转为16进制的utf-8