我必须用Java处理这种情况:
我从声明了encoding = utf-8的客户端收到XML格式的请求。不幸的是,它可能不包含utf-8字符,并且有必要从我这一边的xml中删除这些字符(旧式)。
让我们考虑一个示例,其中该无效XML包含£(磅)。
1)我将xml作为带有£的java字符串(我现在无法访问接口,但我很可能将xml作为java的字符串)。我可以使用replaceAll(£,“”)摆脱这个字符吗?有潜在的问题吗?
2)我得到xml作为字节数组-在这种情况下如何安全地处理此操作?
1)我将xml作为带有£的java字符串(我现在无法访问接口,但我很可能将xml作为java的字符串)。我可以使用replaceAll(£,“”)摆脱这个字符吗?
我假设您的意思是说您要摆脱非ASCII字符,因为您正在谈论“传统”方面。您可以使用以下正则表达式消除可打印ASCII范围之外的任何内容:
string = string.replaceAll("[^\\x20-\\x7e]", "");
您需要将包裹在byte[]中ByteArrayInputStream,以便可以使用UTF-8编码的字符流(通过InputStreamReader其中指定编码)BufferedReader来读取它们,然后使用来逐行读取。
byte[]
ByteArrayInputStream
BufferedReader
例如
BufferedReader reader = null; try { reader = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(bytes), "UTF-8")); for (String line; (line = reader.readLine()) != null;) { line = line.replaceAll("[^\\x20-\\x7e]", ""); // ... } // ...