关于全地球文字符号编码的困惑
本帖最后由 冥界3大法王 于 2024-2-28 21:29 编辑无费话,上代码:{:301_1006:}
编码页,不是我家编的,那是从Delphi帮助中前往微软网站上获得的。
function FileToHex(const AFileName: string): string; //转换函数是本论坛热心 坛友编的
var
Stream: TFileStream;
Buffer: array of Byte;
BytesRead: Integer;
begin
Result := '';
try
try
Stream := TFileStream.Create(AFileName, fmOpenRead);
while True do
begin
BytesRead := Stream.Read(Buffer, SizeOf(Buffer));
if BytesRead = 0 then
Break;
for var I := 0 to BytesRead - 1 do
Result := Format('%s %.2x', ]);
end;
Result := Trim(Result);
except
on E: Exception do
ShowMessage('Error reading file: ' + E.Message);
end;
finally
Stream.Free;
end;
end;
procedure TForm7.得到输入的字串后遍历方式生成编码对应的机器码列表Click(Sender: TObject);
var
PQ: Integer;
strQ: string;
begin
for PQ := 1 to ListBox1.Items.Count - 1 do
begin
RichViewEdit1.SaveText('c:\Hello1.txt', 0, ListBox1.Items.ToInteger);
strQ := FileToHex('c:\Hello1.txt');
ListBox4.Items.Add(strQ);
ListBox4.Update;
end;
end;
总是不能保证,所有的结果,一对一全部对应上,这是何故?{:301_995:} 编码非唯一? 要具有一定的样本量才能正确判断未知文件的编码。 我建议是输入的“你好”获取unicode值,保存起来,然后根据每个代码页用WideCharToMultiBye来转换为对应代码页的字符。
但是我想不通这么做的实际意义,因为“你好”这样的中文字,转换到其他代码页的话,很多情况下可能都是无意义的字符 only998 发表于 2024-2-28 21:39
要具有一定的样本量才能正确判断未知文件的编码。
@only998
要不逆向思考?
修改x64dbg的源代码?
生成输入的字符串转换成所有编码页的机器码回填?
看能否张三对张三?
我样实现的效果是,输入字符串,转换成所有的编码对应的机器码
再转成脚本批量搜索 软件很好用,之前我买过
本帖最后由 爱飞的猫 于 2024-2-29 03:34 编辑
冥界3大法王 发表于 2024-2-28 22:09
@only998
要不逆向思考?
修改x64dbg的源代码?
不是所有的语言代码都有对应的中文字符,例如你截图中的 3F 就是字符集中不包括这个字符的转码错误的表示,将其转换为文字就是半角问号。这个状态已经不能转换回原文了。
大多数(有兼容的吗?)欧美语系的字符集都不能正常兼容 CJK (中日韩)字符,因为设计之初就没考虑过。
目前 Windows 平台下常见的万国码有 Unicode (UTF-16LE)和 UTF-8(一般在跨平台的软件上常见)这两种。
大多数情况下你不需要考虑这些语系的编码。
看你在 1L 的截图,一个字符对应两个字节,看起来更像是 UTF-16LE 的编码结果。你可以尝试使用支持切换编码的编辑器将对应的文字储存,然后使用十六进制编辑器观察对应的编码后的字节。
假设你的系统是简体中文且你的程序没有原生 Unicode 支持,你应当使用 GBK 的代码页,也就是 936,来将当前语系的文字转换到 Unicode(完整的代码页参考)。相关的 API 是 MultiByteToWideChar。 爱飞的猫 发表于 2024-2-29 03:29
不是所有的语言代码都有对应的中文字符,例如你截图中的 3F 就是字符集中不包括这个字符的转码错误的表示 ...
那就简单了,只遍历搜索最常用的这几种拉倒了。 首先可以判断程序创建字体时用的哪种编码,有针对性可能成功率更高,再额外加上 utf8 unicode,就差不多了。
欧美那边的要汉化,一般是utf8? 接触的少,不确定,亚洲这边无非就是 gbk、Shift_JIS、Big5、EUC-KR。可以看一下软件哪个国家出品的,涉猎一下对应国家的编码就差不多。 法王噜噜噜{:1_927:}
页:
[1]
2