这个本身不是字符集之类的问题,而是扫描和识别的算法问题,因为看上去那些汉字不通顺,应该是有些汉字没能正确地识别出来。以前我看过一个联想的扫描仪就有一个软件是扫描之后再把其中的汉字识别出来,把它们从”图片“变成”字符“,但大概有 1%的概率会把少数字弄错,需要人工检查纠正过来。你这其中还是识别的算法问题,程序识别图片时有些字不能正确地处理就变成了小黑框,如果某个汉字已经被识别出来,它就会被 Java 转换成一个 Unicode code point,现在的编程语言和操作系统基本上都是内核使用 Unicode, 在我们给出一个字符时操作系统拿到手时不需要转换也不会出错,也能用它正确地在字体库中找到一个字符的图形来显示出来。
[quote=引用 4 楼 humanity 的回复:] 你从图片中读取之后你“用眼睛确认“过那些有意义的字符都已经正确地读取到了,剩下的小黑框是可以直接删除的?
你从图片中读取之后你“用眼睛确认“过那些有意义的字符都已经正确地读取到了,剩下的小黑框是可以直接删除的?
首先你需要知道数据本身原来是什么字符集的。导入到数据库中之后就不方便处理了,最好是用导入之前的那份数据。因为在数据库中的那份可能已经破坏了,不能保证所有字符能正常还原,正确的方法还是用原来的数据文件重新导入一次,但这次我们需要先选定正确的字符集。 这时你提到的“导入”是什么样的一个过程?你是用数据库提供的命令行工具来做的还是你写的一个 Java 程序做的? 在 Java 中内核是使用 Unicode 的,就是说它记住了每个字符的类似 unicode code point 这种唯一的标记 (它是一个数字),只有当”与外部系统交换数据时”才存在字符集的问题,比如发送到打印机,显示到显示器,保存到文件中,通过网络发送出去(发给数据库)。只要我们在从文件中读取到数据时使用了正确的字符集的话,数据从一个 byte[ ] 正确的转换成了 char (这个由 JRE 的 API 完成了,(只要我们在 new FileReader 时使用了正确的字符集,有时候没有指定字符集它就是用 System.getProperty("file.encoding") 返回的默认字符集,在中文 Windows 上它是 GBK 或 GB18030),当你的数据文件本身不是以 GBK/GB18030保存的时候就出现了乱码问题,因为读取过程已经出错了(它可能把一个“中”字读成了一个“汉”字或一个怪异符号,发给数据库之后当然也是错误的。 只要我们读取到数据的过程使用了正确的字符集,之后发送给数据库就不存在字符集的问题了,因为那是数据库提供的驱动程序的职责,我们相信它不会搞错的。
50,547
社区成员
85,621
社区内容
加载中
试试用AI创作助手写篇文章吧