读取Git中XML作为REST请求时遭遇0xa0非法字符错误的技术问询
解决XML请求中的Illegal character '0xa0'错误
首先,咱们先搞清楚0xa0到底是什么字符:它是不间断空格(Non-breaking Space),和我们平时敲键盘的普通空格(ASCII 0x20)不一样,它的作用是防止文本换行时把空格前后的内容分开,常见于排版场景(比如数字和单位之间,像"10 kg"里的空格就是它)。
接下来分析你的问题:你之前用的replaceAll("[\x00-\x09\x11\x12\x14-\x1F\x7F]", "")并没有包含0xa0这个字符,所以自然没法把它过滤掉,这就是错误依然存在的核心原因。
那到底该移除它还是编码呢?分两种情况来处理:
- 如果这个不间断空格在你的XML内容里是无意义的冗余字符:直接把它加入替换规则就行,修改后的代码可以是这样:
要是只想精准清除不间断空格,也可以直接写:// 把0xa0加入待替换的特殊字符集合,同时保留正常的空格(0x20) String cleanedXml = originalXml.replaceAll("[\x00-\x09\x11\x12\x14-\x1F\x7F\xA0]", "");String cleanedXml = originalXml.replace("\u00A0", ""); - 如果这个不间断空格是业务需要保留的有效字符:那你不需要移除它,而是要确保XML能被正确处理。XML本身是支持不间断空格的,但要注意你的REST接口的要求——如果接口期望的是普通空格,你可以把它替换成ASCII 0x20;如果必须保留它的语义,只要你用UTF-8编码发送请求,大多数现代的REST框架都会自动帮你处理好编码问题,不会触发非法字符错误。
最后给你个小排查技巧:以后遇到这种隐藏的特殊字符,可以把可疑字符转成整数打印出来,比如System.out.println((int) suspiciousChar),这样就能快速定位它的ASCII码,方便后续针对性处理。
内容的提问来源于stack exchange,提问作者Jimi
相关产品推荐
相关产品推荐

