我们在Linux中使用cron运行了一些java代码,以便在生产数据库中保存数千条记录。该框中的locale charmap是“ANSI_X3.4-1968”。现在,我们在将这些步骤保存到数据库之前采取了以下步骤 1.在文本上使用StringEscapeUtils.unescapeHtml4 2.以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);
现在我想从字符串“uni”中取回“×”。任何帮助将不胜感激。
答案 0 :(得分:3)
基本上没有。你在new String(insertSpecial.getBytes(), "UTF-8");
中犯了最大的错误,这再次表明字符编码难以处理。
这段代码一步一步地做了什么:
insertSpecial
的字节数
我已经多次看过这段代码了,遗憾的是它只会破坏它。这完全是不必要的,即使写得正确也不会“转换”任何东西。如果平台编码不是UTF-8
那么它很可能会破坏任何特殊字符(如果平台编码与String构造函数中给出的编码之间存在适当的差异,甚至整个字符串)。
问号是一个无法转换的角色的占位符,这意味着它永远消失了。
这是一些阅读,所以你不会再犯这个错误:The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)