Skip to content
This repository was archived by the owner on Aug 2, 2020. It is now read-only.

有关消息编码 #42

Closed
jqqqqqqqqqq opened this issue Dec 8, 2017 · 25 comments
Closed

有关消息编码 #42

jqqqqqqqqqq opened this issue Dec 8, 2017 · 25 comments
Labels

Comments

@jqqqqqqqqqq
Copy link

jqqqqqqqqqq commented Dec 8, 2017

使用您的 python sdk 发送 'ي' 字符,qq 会收到 '?'
用 qq 发 'ي',python 这边会收到 '??'

这是使用 python 默认编码的情况,即 python 端为 utf-8

我想咨询一下这种情况应当怎么处理才能正常发送?

在使用 socketapi 的时候这些字符是能正常发送的,只要我 encode 成 gb18030
但是您的这个我 encode 成gb18030也不行,所以现在不知道怎么操作了

@jqqqqqqqqqq
Copy link
Author

ps 跟清真无关,只是有人没事闲的拿这种字符做昵称

@stdrc
Copy link
Member

stdrc commented Dec 8, 2017

目前我这个插件确实是对这种特殊字符处理不了,这是之前就遗留的问题,不过你这么一说我突然想到问题了,刚刚试了下改了代码,在 Windows 下直接用 GB18030 编码就行,之前用的是 ANSI,不过因为还要考虑到 Wine 之类的情况,等我后面有空再看一下

@stdrc
Copy link
Member

stdrc commented Dec 8, 2017

好了我已经改好了。。下个版本发

@stdrc stdrc added the Bug label Dec 8, 2017
@jqqqqqqqqqq
Copy link
Author

哇神速,感谢感谢!

@stdrc
Copy link
Member

stdrc commented Dec 8, 2017

发布了 v3.3.2,可以更新了

@stdrc
Copy link
Member

stdrc commented Dec 8, 2017

沃日等一下,Windows Server 2012 上面似乎还是不行,容我再测测

@jqqqqqqqqqq
Copy link
Author

可怕(

@stdrc
Copy link
Member

stdrc commented Dec 8, 2017

先这样吧,感觉 Win Server 这个问题会是个坑(

@jqqqqqqqqqq
Copy link
Author

那我测试下 docker

@stdrc
Copy link
Member

stdrc commented Dec 8, 2017

docker 不行的,wine 里面好像直接就没有 gb18030 编码,只能 gb2312

@stdrc
Copy link
Member

stdrc commented Dec 8, 2017

我开发是在 win10 上首先测的,按理说 win server 怎么也应该跟 win10 一样的呀,难道说 win10 之前的版本本身也就不行

@jqqqqqqqqqq
Copy link
Author

确认 wine 上是不行的。。。
wine 上有没有 gb18030我不知道,不过 cqsocketapi 是能正常在 wine 上工作的,不过得用 gb18030直接通信
https://github.com/yukixz/cqsocketapi/blob/9db8512a81e473f8f2c59a8af39761d539969c84/cqsocketapi/appmain.cpp#L125

它好像压根没处理,直接把 gb18030编码的字符串发出去了

要不考虑搞个gb18030直通或者造个 utf-8到 gb18030转换的轮子?

@jqqqqqqqqqq
Copy link
Author

jqqqqqqqqqq commented Dec 8, 2017

因为实际上对于 python 之类的语言转 gb18030还是挺方便的。。。如果 api 直接用 gb18030通信倒是能接受,python 收到再处理即可

比如说加个选项叫“转换 utf-8” 如果关掉就是 gb18030之类的?

感觉工程量可能不少,不清楚多少地方用 utf-8了

@jqqqqqqqqqq
Copy link
Author

别的语言就不清楚了,毕竟不懂前端这一堆,不懂 http 携带非 utf-8有什么问题

@stdrc
Copy link
Member

stdrc commented Dec 8, 2017

不过 cqsocketapi 是能正常在 wine 上工作的,不过得用 gb18030直接通信
https://github.com/yukixz/cqsocketapi/blob/9db8512a81e473f8f2c59a8af39761d539969c84/cqsocketapi/appmain.cpp#L125

他这个确实是直接原样发过去了,直接 GB18030 肯定是可以的,不过我目前的架构上要直接接受 GB18030 可能有点难度,因为现在整个插件的核心部分是对 UTF-8 做处理的,只要需要转到 UTF-8,那再转回来就会有问题,可能一个解决办法是不通过 WinAPI 的编码转换,找其它库转。

实际上 HTTP 传输过程上是不需要出现 GB18030 的,UTF-8 永远都是可以识别的,关键就在于发送给酷 Q 的时候需要转

@jqqqqqqqqqq
Copy link
Author

我觉得也是,如果能直接用 utf-8通信是最好的,不过只能避开 winapi 了

@jqqqqqqqqqq
Copy link
Author

有没有可能用 Libiconv 来进行 utf8到 gb18030的转换?可以绕开 winnt 支持的样子

@stdrc
Copy link
Member

stdrc commented Dec 18, 2017

理论上可以但我之前测试好像有问题,等放假有空再研究一下

@jqqqqqqqqqq
Copy link
Author

好的,辛苦了

@stdrc
Copy link
Member

stdrc commented Dec 27, 2017

v3.3.3 用 libiconv 做 UTF-8 和 GB18030 之间的转换了,测试 Win 7 和 Win 10 上都没有问题了,但是 Wine 和 Windows Server 2012 只有私聊消息正常,群消息和讨论组消息还是不能发送非中文的特殊字符,很奇怪,暂时不知道是为什么

@jqqqqqqqqqq
Copy link
Author

可以可以,有进展就很 OK

@jqqqqqqqqqq
Copy link
Author

jqqqqqqqqqq commented Dec 28, 2017

Docker 上测试了一下,就我 issue 发的那个字符是能从 tg 发到 qq 了,也能发回来了,从 qq 群组。
我测试一段时间看看还能不能遇到问题

@stdrc
Copy link
Member

stdrc commented Dec 28, 2017

嗯,感谢帮忙测试

@jqqqqqqqqqq
Copy link
Author

测试到现在为止我觉得 Docker 上的工作是正常的,不知道您测试的时候啥地方出问题了

@stdrc
Copy link
Member

stdrc commented Dec 30, 2017 via email

@stdrc stdrc closed this as completed Dec 30, 2017
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

2 participants