|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
vkow (vkow) |
★☆☆☆☆ |
-
|
普通会员 |
|
2018/5/5 11:37:19 |
标题: |
一个古老的UTF-8转码的问题,个别字符乱码如何解决? |
浏览:1188 |
|
加入我的收藏 |
楼主: |
Delphi XE10版本下,其他的Delphi版本也遇到过类似问题。 现在想彻底解决这个问题。所以提出来问问大家有知道的么。
就是etANSI类型的字符串转码为etUTF8型的字符串。 只要是像 ',< 这种字符混在字符串中,用UTF8ToString转码,这个字符和前面的汉字就会转为乱码。
简单的再现方法:使用DropMaster 2.4.8版本,拖拽个UTF-8网页的链接。 打印一下就会看到。
效果如图片:
此帖子包含附件:
大小:44.0K |
----------------------------------------------
- |
作者: |
|
2018/5/5 20:18:14 |
1楼: |
居然敢用 UTF8ToString 这胆子。
跨平台 字符串 讨论(以及 字符串编码 讨论) http://2pascal.com/forum.php?mod=viewthread&tid=1654&fromuid=4 (出处: 2Pascal-新时代的Pascal)
----------------------------------------------
(C)(P)Flying Wang
|
作者: |
vkow (vkow) |
★☆☆☆☆ |
-
|
普通会员 |
|
2018/5/7 9:15:10 |
2楼: |
@wang_80919 (Flying Wang)
有处理字符串的经验么?
能否对具体方案指点一下。
我看了你发的链接,基本在讨论跨平台、数据传输中字符串的问题。
我把问题项目独立出来了。
大家看看能否搞定转换。编译项目,点击 test 按钮。就能再现问题。
----------------------------------------------
-
|
作者: |
|
2018/5/7 10:10:36 |
3楼: |
楼主,准备好500万人民币再说。 不想看免费的文档,就准备好钱吧。
你的 DEMO 代码,给我5个亿,我都解决不了。 你都有 ? 号了。 基本上就是 转码 已经失败。是来源都已经是错误的内容了。
----------------------------------------------
(C)(P)Flying Wang
|
作者: |
|
2018/5/8 8:19:30 |
4楼: |
我一般用TStringStream来转,效果好
----------------------------------------------
-
|
作者: |
|
2018/5/8 8:55:30 |
5楼: |
楼主,你的问题描述得不够清楚,用的什么控件?是UTF-8转UnicodeString,还是转AnsiString?
----------------------------------------------
-
|
作者: |
|
2018/5/8 9:12:30 |
6楼: |
楼主你的 TEST_UTF8 : String 定义只适用于Delphi2009之前的版本,在新版Delphi中,你应该用UTF8String类型。此外,貌似你的这个UTF8字符串本身就不对。
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
|
作者: |
vkow (vkow) |
★☆☆☆☆ |
-
|
普通会员 |
|
2018/5/8 15:29:23 |
7楼: |
问题解决了。 大体原因就是AnsiString转成WideString后,再转回AnsiString,在双字节和单字节上delphi处理的还是不够完善。 简单来说,就是一个AnsiString字符串转为WideString,再转回AnsiString后,两个字符串的bytes是不一样的。
具体到我代码里面,就是DropMaster在处理系统传过来的字符串是AnsiString。在事件中传递参数时,转成了String(默认为WideString)。之后,UTF8ToString就出现了上面的问题。
解决方法,就是修改DropMaster源码,要不就把参数明确为AnsiString,要不就是直接在源码里加入UTF8ToString。当然最好是明确参数。因为系统传递过来的字符串不一定需要UTF8转码。
最后,还是要谢谢兄弟们的帮忙。 ---------- 对了,前面发的那个测试Demo,大家没必要研究了。那个字符串本身就是有问题的。是经过AnsiString和WideString来回转换之后的。
----------------------------------------------
-
|
作者: |
|
2018/5/8 15:58:11 |
8楼: |
狗屁,是太完善了,你 不会用。
1 楼的 网址,你眼瞎肯定看不见。
----------------------------------------------
(C)(P)Flying Wang
|
|