两个可能是编码相关的问题

第一个是powershell的,自己很久以前写了一个ps脚本,用的是powershell ISE,当时应该是以utf8格式保存的,但是隔了很长时间后使用utf8格式打开发现有个别字体乱码的情况,这个是为什么?


第二个是网上看到的,qq相关的内容。

个人这边设备也是如此,而且用手机全文复制发送到微信PC端也会有后半部分内容未能显示的情况。用电报telegram就能正常显示。使用脚本之家的unicode中文转换工具之后发现有个'%00'导致后面的内容被截断了,我想知道为什么这会影响到PC端而不会影响移动端?是传递方式不一样?

1 个赞

第一个问题,可能是编辑器问题或者是你硬盘丢数据了(数据存储出问题了)。正常情况下如果是编码问题,不至于只有几个字符无法正常显示。

第一处乱码猜测是,其正确的utf8编码是\xef\xbc\x89,但你的图片中似乎没有正确识别第3字节的\x89;最后一处乱码猜测是,其正确的utf8编码是\xe5\x90\x8d,但你图片中似乎也是没有正确识别第3字节的\x8d

尝试更换编辑器看看是否能正常显示,如果都不能的话,建议看一下硬盘的SMART数据,如果有异常趁早备份数据。


第二个问题还算是比较常见的情况,因为电脑端QQ底层主要还C++写的,C++在处理文本的时候,如果没指定其长度的话,默认是用\x00当作文本结束标记的。而安卓端QQ底层主要是Java,Java并没有C++这种文本存储特性,Java对于文本的存储是直接内部维护了一个文本长度,所以不会因为\x00发生截断。

1 个赞

谢谢!
第二个明白了,不过第一个这有点吓人了,随机丢数据。P.S 应该不是编辑器的问题,vscode打开也是这样

不过说起来,微信移动端发送%00开头的文本内容会出错,提示消息无法发送,这个您知道可能的原因吗?

消息因为\x00发不出去这个事情,原因就比较多了,因为不好判断是哪一环节出了问题,如安卓端so层、微信自定义协议层、微信服务器接口层都可能会导致这个情况。

所以一般不太建议在消息中包含\x00,像 qq 那个,常见玩法是用来隐藏消息。

1 个赞