汉字乱码、加密后结果字符串不一致
汉字乱码、加密后结果字符串不一致
以上问题,常见于跨语言或跨操作系统平台。
遇到这种问题,许多人不知所措。
引子:
procedure TForm1.btn1Click(Sender: TObject);
var
SERCRET: string;
signSrc: string;
begin
SERCRET := '9dcbb3305c991fe6581c43058efae380';
signSrc := 'Application-key=e1fce770a0abb2a831d7058d8251e211&X-Yx-Nonce=109418174&X-Yx-Timestamp=1622083573769';
signSrc := THashSHA2.GetHMAC(signSrc, SERCRET, SHA256);
me_Msg.Lines.Add('signSrc HMAC SHA256:'+signSrc);
end;
end.
算出来的结果:f209398656572d6e42cb9df347b6a1a1b9e36dd7b1b4c799cf75ec25bf737f5e
还是跟Java的签名算法的结果不一致。
Java的结果:1b85a20c429d4949256cc55f735cb312db943ede2637c6dad1ccec3d07274e3f
原因:charset 必须一样,比如java方是utf8, delphi方也要utf8。
高版本DELPHI可方便指定CHARSET:
DELPHI 字符串同tbytes相互转换时要指定 charset。
charset不同,同样加密算法 得出的结果字符串是不同的。
中文乱码原因,也是charset不一致所造成的,不同的charset,汉字内码也是不同的。
关于json字符串处理中文的问题
因为 服务端和客户端我们都使用相同版本的delphi开发,所以习惯直接传中文。
但 服务端和客户端如果是跨语言开发,怎么办?
其实业界通常的做法是 使用汉字内码。
只要不同开发语言方,使用统一的charset,json中的汉字就不会乱码。
DELPHI的JSON类,一般有2个方法:asJson 和 asString,前者会将JSON字符串中的汉字转换为汉字内码,后者则不会。
本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/14821084.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?