空格存入数据库变为问号(?)

最近在项目中再次使用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值