gpt4 book ai didi

delphi - 在支持Unicode的Delphi版本中处理AnsiString及其十六进制代码

转载 作者:行者123 更新时间:2023-12-03 18:23:30 24 4
gpt4 key购买 nike

我正在运行一个基于Delphi2007构建的遗留应用程序,在该应用程序中,我们曾经通过在DB中存储字符的2字节十六进制代码来处理非英语字符。
在阅读时,我们应用char()将这些十六进制代码转换为String。

字符串转换为十六进制(保存到数据库之前):

strHex := Format( '%x', [ Byte( strText[ lIndex ] ) shr 4 ] );
DataStr[ lPos ] := strHex[ 1 ];
inc( lPos );

strHex := Format( '%x', [ Byte( strText[ lIndex ] ) and $0F ] );
DataStr[ lPos ] := strHex[ 1 ];
inc( lPos );

//in simple I am saving the Hex code to pcData


十六进制到字符串(从数据库读取后):

strText := strText + Chr( StrToInt('$'+ DataStr[lPos] + DataStr[lPos + 1]))


转到Delphi XE7后,此代码开始中断,其中将字符串视为UniCode字符串,我们必须明确地将字符串转换为AnsiString类型。

将字符串以下转换为十六进制
ТуцЕфылАшдеук8311
在Delphi 2007中给出:
\ D2 \ F3 \ F6 \ C5 \ F4 \ FB \ EB \ C0 \ F8 \ E4 \ E5 \ F3 \ EA8311
在Delphi中,XE7提供:
\ 22 \ 43 \ 46 \ 1A \ 33 \ 4B \ 4B \ 48 \ 44 \ 42 \ 14 \ 44 \ 49 \ 33 \ 351522


我想知道修改此代码的最佳方法,以便可以处理旧数据。

最佳答案

根据评论,您只需要将此数据解码为本地Unicode string。这样做:


从数据库中将编码后的文本读取到string变量中。
将该文本解码为字节数组而不是字符串。您的Delphi 2007代码几乎可以使用,但是它需要写入字节数组而不是字符串。
该字节数组是ANSI 1251编码的。用TEncoding.GetString对其进行解码。您需要使用正确的代码页TEncoding创建Encoding := TEncoding.GetEncoding(1251)类的实例。

关于delphi - 在支持Unicode的Delphi版本中处理AnsiString及其十六进制代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35198722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com