恢复错误编码的字符(Java)
我们在Linux中使用cron运行了一些java代码,以在生产数据库中保存数千条记录。该框中的区域设置字符映射为“ANSI_X3.4-1968”。现在,在将它们持久化到数据库之前,我们采取了以下步骤。 1.在文本上使用StringEscapeUtils.unescapethml4 2.以UTF-8格式写入字符串并保存在数据库中 现在的问题是在这些步骤之后,特殊字符显示为“?”。是否可以将其还原为原始角色? 我用以下步骤模拟了这个问题恢复错误编码的字符(Java),java,encoding,utf-8,Java,Encoding,Utf 8,我们在Linux中使用cron运行了一些java代码,以在生产数据库中保存数千条记录。该框中的区域设置字符映射为“ANSI_X3.4-1968”。现在,在将它们持久化到数据库之前,我们采取了以下步骤。 1.在文本上使用StringEscapeUtils.unescapethml4 2.以UTF-8格式写入字符串并保存在数据库中 现在的问题是在这些步骤之后,特殊字符显示为“?”。是否可以将其还原为原始角色? 我用以下步骤模拟了这个问题 将Eclipse编码更改为“ANSI_X3.4-1968” 写
现在我想从字符串“uni”返回“×”。任何帮助都将不胜感激。基本上没有。您在
新字符串(insertSpecial.getBytes(),“UTF-8”)中犯了最大的错误
再次表明字符编码令人惊讶地难以处理
这段代码的作用是,一步一步:
insertSpecial
中的字节UTF-8
,那么它很可能会破坏任何特殊字符(甚至整个字符串,如果平台编码与字符串构造函数中给出的编码之间存在适当的差异)
问号是无法转换的字符的占位符,这意味着它将永远消失
下面是一些阅读材料,这样你就不会再犯这样的错误了:基本上问题出在cron作业上。当我们手动测试时,编码是“UTF-8”,一切正常。但我们不知道,默认情况下从cron作业运行时,它将采用不同的编码。现在,在脚本运行之后,我们发现了这个问题,并且无法恢复,因为我们不再有输入文本了。嗯,根本问题是不理解编码。我见过同样的
新字符串(insertSpecial.getBytes(),“UTF-8”)代码>行几次之前,我想知道你从哪里想出它?它永远不会起作用,那么为什么这么多人在尝试呢?
String insertSpecial = StringEscapeUtils.unescapeHtml4("×");
System.out.println(insertSpecial);
String uni = new String(insertSpecial.getBytes(), "UTF-8");// This value is currently in DB
System.out.println(uni);