St *_*zke 17 java xml encoding utf-8
我必须在Java中处理这种情况:
我从声明为encoding = utf-8的客户端获取XML格式的请求.不幸的是,它可能不包含utf-8字符,并且需要从我这边的xml中删除这些字符(遗留).
让我们考虑这个无效XML包含£(磅)的示例.
1)我得到xml作为带有£的java字符串(我现在没有访问接口,但我可能得到xml作为java字符串).我可以使用replaceAll(£,"")来摆脱这个角色吗?任何潜在的问题?
2)我得到xml作为字节数组 - 在这种情况下如何安全地处理这个操作?
Bal*_*usC 26
1)我得到xml作为带有£的java字符串(我现在没有访问接口,但我可能得到xml作为java字符串).我可以使用replaceAll(£,"")来摆脱这个角色吗?
我假设你想要摆脱非ASCII字符,因为你在谈论一个"遗产"方面.您可以使用以下正则表达式删除可打印ASCII范围之外的任何内容:
string = string.replaceAll("[^\\x20-\\x7e]", "");
Run Code Online (Sandbox Code Playgroud)
2)我得到xml作为字节数组 - 在这种情况下如何安全地处理这个操作?
您需要将其包装成byte[]
一个ByteArrayInputStream
,以便您可以使用UTF-8编码的字符流读取它们,InputStreamReader
其中您指定编码,然后使用a 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]", "");
// ...
}
// ...
Run Code Online (Sandbox Code Playgroud)
Sea*_*wen 18
UTF-8是一种编码; Unicode是一个字符集.但GBP符号绝对是Unicode字符集,因此绝对可以用UTF-8表示.
如果你确实意味着UTF-8,并且你实际上试图删除不是UTF-8中字符的有效编码的字节序列,那么......
CharsetDecoder utf8Decoder = Charset.forName("UTF-8").newDecoder();
utf8Decoder.onMalformedInput(CodingErrorAction.IGNORE);
utf8Decoder.onUnmappableCharacter(CodingErrorAction.IGNORE);
ByteBuffer bytes = ...;
CharBuffer parsed = utf8Decoder.decode(bytes);
...
Run Code Online (Sandbox Code Playgroud)
小智 7
"test text".replaceAll("[^\\u0000-\\uFFFF]", "");
Run Code Online (Sandbox Code Playgroud)
此代码从string中删除所有4字节的utf8字符.在执行Mysql innodb varchar条目时,这可能需要用于某些目的