java或其他技术去除乱码的问题

weblogicssl 2015-01-15 04:39:40





就这上面这些垃圾数据,小黑方块 怎么去掉?

大神帮忙

不知道怎么的,就导入到数据库中了,很多,现在想去掉,不知道怎么办了
...全文
276 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
u013800307 2015-01-23
  • 打赏
  • 举报
回复
亲们,你们都用说明从图片中读取数据啊?
humanity 2015-01-15
  • 打赏
  • 举报
回复
在 Java 中只能是找出 编码 超出了常见汉字和中英文标点和像版权商标符号这类常见符号之外的字符并把它们删除掉。我不知道你是使用什么软件把图片读取成字符的,看着那些小黑框可能是把数据保存到文件中或从文件中读取出来时弄错了字符集,就好像我们用一些软件以 ANSI 字符编码导出一段简体汉字在文件中,拿到一个繁体中文 Windows 上也用 ANSI 编码去读取它时就有这种类似的问题,有部分字符在两个系统上都有的话它就正确,要是没有它就不正常。 汉字都是多个字节的,保存到文件中都是 byte [ ] 这种序列,如果弄错了字符集,那读取时就不知道一个汉字与它旁边的另一个汉字的边界在哪里,我们不知道哪几个字节排在一起是一个汉字,哪几个其它的字节排在一起是另一个汉字。 所以首先我们要确认从图片中已经正确识别出来的汉字本身与我们在准备导入到数据库之前还依然是正确的(没有识别出来的排除),这要这个步骤是正确的,那么剩下的就只是当成”软件无法识别图片中某些字符“,这时我们就把怪异字符全部删除掉。
skyhitnow 2015-01-15
  • 打赏
  • 举报
回复
http://www.regexlab.com/zh/encoding.htm
weblogicssl 2015-01-15
  • 打赏
  • 举报
回复
引用 6 楼 humanity 的回复:
这个本身不是字符集之类的问题,而是扫描和识别的算法问题,因为看上去那些汉字不通顺,应该是有些汉字没能正确地识别出来。以前我看过一个联想的扫描仪就有一个软件是扫描之后再把其中的汉字识别出来,把它们从”图片“变成”字符“,但大概有 1%的概率会把少数字弄错,需要人工检查纠正过来。你这其中还是识别的算法问题,程序识别图片时有些字不能正确地处理就变成了小黑框,如果某个汉字已经被识别出来,它就会被 Java 转换成一个 Unicode code point,现在的编程语言和操作系统基本上都是内核使用 Unicode, 在我们给出一个字符时操作系统拿到手时不需要转换也不会出错,也能用它正确地在字体库中找到一个字符的图形来显示出来。
那你说的这种,就只能从图片转文字那找问题了?Java或其他技术就没办法处理掉吗?
humanity 2015-01-15
  • 打赏
  • 举报
回复
引用 5 楼 weblogicssl 的回复:
[quote=引用 4 楼 humanity 的回复:] 你从图片中读取之后你“用眼睛确认“过那些有意义的字符都已经正确地读取到了,剩下的小黑框是可以直接删除的?
我是自动读的,图片上万张,我不可能挨个去里边吧 小黑框删除啊[/quote] 如果只是删除小黑框,那只要读取成 String 之后用正则表达式来批量替换,就是先确定常见汉字和中英文字符及商标版权等字符的范围,凡是超出这个范围的字符全部去掉。 在百度上搜索 ”正则表达式 30 分钟教程“。
humanity 2015-01-15
  • 打赏
  • 举报
回复
这个本身不是字符集之类的问题,而是扫描和识别的算法问题,因为看上去那些汉字不通顺,应该是有些汉字没能正确地识别出来。以前我看过一个联想的扫描仪就有一个软件是扫描之后再把其中的汉字识别出来,把它们从”图片“变成”字符“,但大概有 1%的概率会把少数字弄错,需要人工检查纠正过来。你这其中还是识别的算法问题,程序识别图片时有些字不能正确地处理就变成了小黑框,如果某个汉字已经被识别出来,它就会被 Java 转换成一个 Unicode code point,现在的编程语言和操作系统基本上都是内核使用 Unicode, 在我们给出一个字符时操作系统拿到手时不需要转换也不会出错,也能用它正确地在字体库中找到一个字符的图形来显示出来。
weblogicssl 2015-01-15
  • 打赏
  • 举报
回复
引用 4 楼 humanity 的回复:
你从图片中读取之后你“用眼睛确认“过那些有意义的字符都已经正确地读取到了,剩下的小黑框是可以直接删除的?
我是自动读的,图片上万张,我不可能挨个去里边吧 小黑框删除啊
humanity 2015-01-15
  • 打赏
  • 举报
回复
你从图片中读取之后你“用眼睛确认“过那些有意义的字符都已经正确地读取到了,剩下的小黑框是可以直接删除的?
weblogicssl 2015-01-15
  • 打赏
  • 举报
回复
引用 2 楼 humanity 的回复:
首先你需要知道数据本身原来是什么字符集的。导入到数据库中之后就不方便处理了,最好是用导入之前的那份数据。因为在数据库中的那份可能已经破坏了,不能保证所有字符能正常还原,正确的方法还是用原来的数据文件重新导入一次,但这次我们需要先选定正确的字符集。 这时你提到的“导入”是什么样的一个过程?你是用数据库提供的命令行工具来做的还是你写的一个 Java 程序做的? 在 Java 中内核是使用 Unicode 的,就是说它记住了每个字符的类似 unicode code point 这种唯一的标记 (它是一个数字),只有当”与外部系统交换数据时”才存在字符集的问题,比如发送到打印机,显示到显示器,保存到文件中,通过网络发送出去(发给数据库)。只要我们在从文件中读取到数据时使用了正确的字符集的话,数据从一个 byte[ ] 正确的转换成了 char (这个由 JRE 的 API 完成了,(只要我们在 new FileReader 时使用了正确的字符集,有时候没有指定字符集它就是用 System.getProperty("file.encoding") 返回的默认字符集,在中文 Windows 上它是 GBK 或 GB18030),当你的数据文件本身不是以 GBK/GB18030保存的时候就出现了乱码问题,因为读取过程已经出错了(它可能把一个“中”字读成了一个“汉”字或一个怪异符号,发给数据库之后当然也是错误的。 只要我们读取到数据的过程使用了正确的字符集,之后发送给数据库就不存在字符集的问题了,因为那是数据库提供的驱动程序的职责,我们相信它不会搞错的。
你说的这种情况,我试过了,数据没存入到数据库之前,就出现了小黑框,我的数据是从图片中获取的,获取后就存在一些乱码和小黑框,现在我就是想把小黑框去掉,其他的我都能用replace去掉,但就是这个小黑框不行
humanity 2015-01-15
  • 打赏
  • 举报
回复
首先你需要知道数据本身原来是什么字符集的。导入到数据库中之后就不方便处理了,最好是用导入之前的那份数据。因为在数据库中的那份可能已经破坏了,不能保证所有字符能正常还原,正确的方法还是用原来的数据文件重新导入一次,但这次我们需要先选定正确的字符集。 这时你提到的“导入”是什么样的一个过程?你是用数据库提供的命令行工具来做的还是你写的一个 Java 程序做的? 在 Java 中内核是使用 Unicode 的,就是说它记住了每个字符的类似 unicode code point 这种唯一的标记 (它是一个数字),只有当”与外部系统交换数据时”才存在字符集的问题,比如发送到打印机,显示到显示器,保存到文件中,通过网络发送出去(发给数据库)。只要我们在从文件中读取到数据时使用了正确的字符集的话,数据从一个 byte[ ] 正确的转换成了 char (这个由 JRE 的 API 完成了,(只要我们在 new FileReader 时使用了正确的字符集,有时候没有指定字符集它就是用 System.getProperty("file.encoding") 返回的默认字符集,在中文 Windows 上它是 GBK 或 GB18030),当你的数据文件本身不是以 GBK/GB18030保存的时候就出现了乱码问题,因为读取过程已经出错了(它可能把一个“中”字读成了一个“汉”字或一个怪异符号,发给数据库之后当然也是错误的。 只要我们读取到数据的过程使用了正确的字符集,之后发送给数据库就不存在字符集的问题了,因为那是数据库提供的驱动程序的职责,我们相信它不会搞错的。
weblogicssl 2015-01-15
  • 打赏
  • 举报
回复
没有人知道吗?

50,547

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧