tangguo

使用声明的encoding = utf-8从xml中删除非UTF-8字符-Java

java

我必须用Java处理这种情况:

我从声明了encoding = utf-8的客户端收到XML格式的请求。不幸的是,它可能不包含utf-8字符,并且有必要从我这一边的xml中删除这些字符(旧式)。

让我们考虑一个示例,其中该无效XML包含£(磅)。

1)我将xml作为带有£的java字符串(我现在无法访问接口,但我很可能将xml作为java的字符串)。我可以使用replaceAll(£,“”)摆脱这个字符吗?有潜在的问题吗?

2)我得到xml作为字节数组-在这种情况下如何安全地处理此操作?


阅读 311

收藏
2020-11-28

共1个答案

小编典典

1)我将xml作为带有£的java字符串(我现在无法访问接口,但我很可能将xml作为java的字符串)。我可以使用replaceAll(£,“”)摆脱这个字符吗?

我假设您的意思是说您要摆脱非ASCII字符,因为您正在谈论“传统”方面。您可以使用以下正则表达式消除可打印ASCII范围之外的任何内容:

string = string.replaceAll("[^\\x20-\\x7e]", "");

2)我得到xml作为字节数组-在这种情况下如何安全地处理此操作?

您需要将包裹在byte[]ByteArrayInputStream,以便可以使用UTF-8编码的字符流(通过InputStreamReader其中指定编码)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]", "");
        // ...
    }
    // ...
2020-11-28