最近在项目中再次使用Excel导入数据库的问题。
目的是将Excel中的选择题导入数据库,然后在列表中展示。结果遇到了个奇怪的问题 -----> 奇怪的空格变成了 ‘?’。单独新增的时候是没有问题的,下载模板之后,编写内容导入,空格也是没问题。不管是半角还是全角,到数据库还是空格。为什么给了一套题导入的时候出现了 “?”。。。简直坑爹。网上查找都说是编码问题,感觉写的没啥毛病(有问题就是有毛病),然后慢慢查找发现了问题。
UTF-8这种编码里面,存在一个特殊字符,其编码是“0xC2 0xA0”,转换成字符的时候,表现为一个空格,跟一般的半角空格(ASCII 0x20)一样,唯一的不同是它的宽度不会被压缩,因此比较多的被用于网页排版(如首行缩进之类)。而其他的编码方式如GB2312、Unicode之类并没有这样的字符,因此如果简单地进行编码转换,生成地GB2312/Unocode字符串中,这个字符就会被替换成为问号(ASCII ox3F)。此时如果进行写库、写文件之类,就会把问号直接写入了。
其实这根本就不是空格,它是一个特殊的符号。可是怎么看都像是空格,在页面的textarea里,QQ微信消息都是空格。最后我把它复制到了 “word” 里,奇怪事情的发生了,果然不是空格,坑死。
解决办法就是将这个"空格"替换成真的 空格
最后代码:
byte[] space = new byte[]{(byte)0xC2,(byte)0xA0};
String UTFSpace = null;
try {
UTFSpace = new String(space,"utf-8");
} catch (Exception e) {
e.printStackTrace();
}
content.replace(UTFSpace," ");
content是 你以为有"空格"的内容。
转自 : https://www.iteye.com/blog/zoroeye-2119747