吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 872|回复: 10
收起左侧

[求助] 关于全地球文字符号编码的困惑

[复制链接]
冥界3大法王 发表于 2024-2-28 21:26
本帖最后由 冥界3大法王 于 2024-2-28 21:29 编辑

无费话,上代码:
编码页,不是我家编的,那是从Delphi帮助中前往微软网站上获得的。

[Delphi] 纯文本查看 复制代码


function FileToHex(const AFileName: string): string; //转换函数是本论坛热心 坛友编的
var
  Stream: TFileStream;
  Buffer: array[0..255] 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', [Result, Buffer[I]]);
      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[PQ].ToInteger);
    strQ := FileToHex('c:\Hello1.txt');
    ListBox4.Items.Add(strQ);
    ListBox4.Update;
  end;
end;


image.png

image.png

总是不能保证,所有的结果,一对一全部对应上,这是何故?

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

sai609 发表于 2024-2-28 21:34
编码非唯一?
only998 发表于 2024-2-28 21:39
要具有一定的样本量才能正确判断未知文件的编码。
yes2 发表于 2024-2-28 21:48
我建议是输入的“你好”获取unicode值,保存起来,然后根据每个代码页用WideCharToMultiBye来转换为对应代码页的字符。
但是我想不通这么做的实际意义,因为“你好”这样的中文字,转换到其他代码页的话,很多情况下可能都是无意义的字符
 楼主| 冥界3大法王 发表于 2024-2-28 22:09
only998 发表于 2024-2-28 21:39
要具有一定的样本量才能正确判断未知文件的编码。

@only998
要不逆向思考?
修改x64dbg的源代码?
生成输入的字符串转换成所有编码页的机器码回填?
看能否张三对张三?
我样实现的效果是,输入字符串,转换成所有的编码对应的机器码
再转成脚本批量搜索

点评

不是所有的语言代码都有对应的中文字符,例如你截图中的 3F 就是字符集中不包括这个字符的转码错误的表示,将其转换为文字就是半角问号。这个状态已经不能转换回原文了。 大多数(有兼容的吗?)欧美语系的字符集  详情 回复 发表于 2024-2-29 03:29
fangshouyiboba 发表于 2024-2-28 22:39
软件很好用,之前我买过
爱飞的猫 发表于 2024-2-29 03:29
本帖最后由 爱飞的猫 于 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
 楼主| 冥界3大法王 发表于 2024-2-29 08:35
爱飞的猫 发表于 2024-2-29 03:29
不是所有的语言代码都有对应的中文字符,例如你截图中的 3F 就是字符集中不包括这个字符的转码错误的表示 ...

那就简单了,只遍历搜索最常用的这几种拉倒了。
only998 发表于 2024-2-29 08:45
首先可以判断程序创建字体时用的哪种编码,有针对性可能成功率更高,再额外加上 utf8   unicode,就差不多了。
欧美那边的要汉化,一般是utf8? 接触的少,不确定,亚洲这边无非就是 gbk、Shift_JIS、Big5、EUC-KR。可以看一下软件哪个国家出品的,涉猎一下对应国家的编码就差不多。
alongzhenggang 发表于 2024-3-7 06:23
法王噜噜噜
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-13 17:00

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表