java.io.UncheckedIOException: java.nio.charset.MalformedInputException: Input length = 1 异常解决
摘要:前端传输生僻字导致服务端报错(MalformedInputException),初步判断是编码问题。Wireshark抓包时中文默认显示为点符号,需配置UTF-8才能正确显示。但前端发现即使选择UTF-8,生僻字仍无法正确传输。问题可能与生僻字的特殊编码处理有关,需进一步排查前后端编码配置是否一致。(99字)
目录
现象
和前端联调时,发现前端传输的生僻字参数时会使服务端报错(非生僻字正常):java.lang.IllegalStateException: java.io.UncheckedIOException: java.nio.charset.MalformedInputException: Input length = 1。异常栈最先抛出的是 MalformedInputException,这个类的包名关键字是 charset,感觉像是编码问题导致的。本地跑测试用例未复现。
使用Wireshark抓包
本地使用Wireshark抓包的时候,但是报文中中文显示为点符号。如下图所示

中文显示问题
这是Wireshark的默认显示问题,不是抓包错误。Wireshark默认将非ASCII字符显示为点(.),需要配置才能正确显示中文。
Wireshark默认配置
-
ASCII-only显示:默认只显示ASCII字符(0x00-0x7F)
-
非ASCII转为点号:中文、日文、韩文等都显示为点符号
解决方案
查看包的字节流,具体操作如下图所示


问题原因
前端同学按照同样的方式抓包操作,发现传输的时候生僻字即便选择urf-8也不能显示正确如下图所示。前端反馈调用了浏览器的一些接口,处理特殊字符的编码存在问题。

======================
喜欢求个关注,回归持续更新
======================
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)