找回密码
 加入
搜索
查看: 4192|回复: 7

[系统综合] 编码转换中字符丢失,有没有解决的办法

  [复制链接]
发表于 2012-6-11 15:58:55 | 显示全部楼层 |阅读模式
本帖最后由 roamr 于 2012-6-11 16:05 编辑
$ansiString = "信乐团-天高地厚.mp3"

;第一步,将 ANSI 字符串转换成为二进制数据
$binary1 = StringToBinary($ansiString, 4)

;第二步,将二进制数据转换成为 UTF8 字符串
$utf8String = BinaryToString($binary1, 1)

;第三步,将 UTF8 字符串转换成为二进制数据,此时发现二进制数据中有部分丢失了
$binary2 = StringToBinary($utf8String, 1)

;第四部,将二进制数据转换成为 ANSI 字符串,然后有部分文字未转换成功
$endString = BinaryToString($binary2, 4)

MsgBox(0, "", $binary1 & @CRLF & $binary2)
MsgBox(0, "", $utf8String & @CRLF & $endString)
原字符串 ansiString 在转换成 utf8 编码后,得到一串乱码。
将这串乱码转回 ansi 编码,会有类似于 ? 的字符出现。分析过程发现是有数据丢失。见上面的代码示例。
不知道数据是在转换成 utf8 字符串时丢失的,还是在将 utf8 字符串转换成二进制丢失的。

求助各位前辈,有没有一种办法可以在转换编码时不丢失数据?
发表于 2012-6-11 16:03:14 | 显示全部楼层
不好意思,没研究过这个,不过可以告诉你代码位错了
 楼主| 发表于 2012-6-11 16:10:07 | 显示全部楼层
不好意思,没研究过这个,不过可以告诉你代码位错了
netegg 发表于 2012-6-11 16:03

代码错位,神马意思?
发表于 2012-6-11 16:55:35 | 显示全部楼层
回复 3# roamr

你代码的第二步及第四步错了, 应该是这样:
$ansiString = "信乐团-天高地厚.mp3"

;第一步,将 ANSI 字符串转换成为 UTF8 的二进制数据
$binary1 = StringToBinary($ansiString, 4)

;第二步,将 utf8 的二进制数据转换成为 UTF8 字符串
$utf8String = BinaryToString($binary1, 4)

;第三步,将 UTF8 字符串又转换成为 ANSI 二进制数据
$binary2 = StringToBinary($utf8String, 1)

;第四步,将 ANSI 二进制数据转换成为 ANSI 字符串
$endString = BinaryToString($binary2, 1)

MsgBox(0, "", $binary1 & @CRLF & $binary2)
MsgBox(0, "", $utf8String & @CRLF & $endString)
蛋大说的代码位错了, 就是说你没用对 二进制的'代码'!
第二步时, 二进制的数据是 UTF8, 所以参数只能用 4, 你却用了 1 .
同理, 第四步时, 二进制的数据是 ANSI , 所以参数也只能用 1, 用别的参数自然转换会错误!
发表于 2012-6-11 19:11:24 | 显示全部楼层
我是来学习的。谢谢
发表于 2012-6-11 21:13:08 | 显示全部楼层
学了来了,谢谢楼上的
 楼主| 发表于 2012-6-11 22:08:44 | 显示全部楼层
回复  roamr

你代码的第二步及第四步错了, 应该是这样:蛋大说的代码位错了, 就是说你没用对 二进制的'代 ...
user3000 发表于 2012-6-11 16:55


就是这样才转换编码啊,如果 BinaryToString($StringToBinary($ansiString, 4), 4) 这样不就等于没转换么。
发表于 2012-6-11 22:21:46 | 显示全部楼层
回复 7# roamr

那要看 $ansiString 原来的数据是什么编码!

如果是 UTF8, 当然是等于没换! 如果是你的示例中的 ANSI 编码, 那最后已经转换成 UTF8 编码了!
这能说等于没转换吗?? 看来你还是没理解这个'转换'机制!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-20 14:38 , Processed in 0.091514 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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