我的解决办法:
/**
* 转换UTF-8编码下空格诡异变成的?号* @param content
* @return
*/
public String transUTFQuestionMark(String content){
try {
byte[] spaces = {-62,-96};//UTF-8形式的空格的byte[]形式 即?号
String UTFSpace = new String(spaces,"UTF-8");//将byte[]型的空格用UTF-8的编码形式转换成?号
// System.out.println("====utf8空格===="+UTFSpace);
byte[] otherSpaces = {-62,-96,32};//UTF-8形式的空格的byte[]形式 即?号加一个空格 (? )
String otherUTFSpace = new String(otherSpaces,"UTF-8");//将byte[]型的空格用UTF-8的编码形式转换成?号+一个空格
// System.out.println("====utf8 other空格===="+otherUTFSpace);
// System.out.println("=== old content====="+content);
content = content.replaceAll(UTFSpace, " ");//首先替换后面不带空格的?号(必须首先)
// System.out.println("=====new content==="+content);
content = content.replaceAll(otherUTFSpace, " ");//然后替换不带空格的?号。
// System.out.println("=====final content==="+content);
// byte[] transContent = finalContent.getBytes("UTF-8");
// newContent = new String(transContent,"UTF-8");
// for(int i=0;i<transContent.length;i++){
// System.out.println("=============="+transContent[i]);
// }
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return content;
}