当前位置: 首页 > 知识库问答 >
问题:

恢复错误编码的字符(Java)

贺季同
2023-03-14

我们运行了一些java代码,使用cron在Linux中持久化生产数据库中的数千条记录。该框中的区域设置字符是"ANSI_X3.4-1968"。现在,我们在将这些持久化到数据库之前采取了以下步骤。1.在文本2上使用StringEscape eUtils.unescapeHtml4。以UTF-8格式写入字符串并在数据库中持久化

现在的问题是在这些步骤之后,特殊字符显示为“?”。有没有可能把它还原回原来的角色?我用以下步骤模拟了这个问题。

  1. 将Eclipse编码更改为“ANSI_X3.4-1968”
  2. 写下面几行代码
 

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”中返回“×”。任何帮助都将不胜感激。

共有1个答案

曾元忠
2023-03-14

基本上没有。您在new String(插入pecial.getBytes(),UTF-8)中犯了最大的错误;这再次表明字符编码令人惊讶地难以处理。

这段代码的作用是一步一步:

  1. 给我的字节从插入特殊在平台编码
  2. 从字节创建一个新的字符串,告诉字节是UTF-8(即使字节是在之前的平台编码中获得的)

这个代码我已经看过好几次了,不幸的是它只会破坏一些东西。这是完全不必要的,即使写得正确,也不会“转换”任何内容。如果平台编码不是UTF-8,那么它很可能会破坏任何特殊字符(甚至整个字符串,如果平台编码与字符串构造函数中给出的编码之间存在适当的差异)。

问号是无法转换的字符的占位符,意味着它永远消失了。

下面是一些阅读材料,这样你就不会再犯这样的错误:每个软件开发人员绝对、肯定地必须了解Unicode和字符集(没有借口!)

 类似资料:
  • 所以我一直在学习如何在Eclipse中使用JavaFX,并且遇到了一个字符编码错误,它总是发生在类声明之前的最后一个字符上。 每当我运行脚本时,都会出现一个程序错误,该错误正好说明: “无法完成保存。请尝试文件。” 我试过下载一个支持FX的程序,叫做IntelliJ IDEA,同样的错误也发生在那个程序上。然而,我通过手工重写最后一次导入,设法在IntelliJ上修复了这个错误。不幸的是,当我使用

  • 问题内容: 我正在处理python-lastfm库返回的unicode字符串。 我假设在途中某个地方,该库获取了错误的编码,并返回了可能包含无效字符的unicode字符串。 例如,我期望变量a中的原始字符串为“G​​lück” \ xfc是转义值252,它对应于latin1编码的“ü”。它以某种方式以python无法自行处理的方式嵌入到unicode字符串中。 如何将其转换回包含原始“Glück”

  • 场景:用于编辑产品详细信息的HTML文档被编码为ISO-8859-1,并将POST数据发送到PHP文件(也被编码为ISO-8859-1)。这个PHP文件有mysql_real_escape_string-functions来清理输入。数据库/MySQL server字符集为UTF-8。问题是,当POST字符串中包含斯堪的纳维亚字母(ä,ö,å)时,mysql_real_escape_string返

  • 我在项目中使用Java、Eclipse和Ant。我有一些Java代码需要编辑并在其中添加一些UTF-8字符。以前是我的身材。xml:而且它工作得很好。现在,在我尝试运行时添加这些UTF-8字符之后,它抛出“错误:编码Cp1252的不可映射字符” 谁能告诉我解决办法是什么?我试图改变编码UTF-8和cp1252在xml但没有运气。 我使用的是JRE7、Eclipse开普勒和蚂蚁4.11。

  • 问题内容: 我使用UTF-8编码从数组创建了一个。 但是,它应该已经使用其他编码创建(Windows-1252)。 有没有办法将此String转换回正确的编码? 我知道如果可以访问原始字节数组很容易做到,但是就我而言,为时已晚,因为它是由封闭的源库提供的。 问题答案: 关于这是否可行似乎有些困惑,我想我需要提供一个广泛的例子。 该问题声称(初始)输入是包含Windows-1252编码数据的输入。我

  • 问题内容: 我是一个初学者,在Python 2.7中无法解码带有数字+(简体)汉字的几十个CSV文件到UTF-8。 我不知道输入文件的编码,所以我尝试了所有我知道的可能的编码- GB18030,UTF-7,UTF-8,UTF-16和UTF-32(LE和BE)。同样,尽管它们应该是GB18030的子集,但最好还是使用GBK和GB3212。当它们到达第一个汉字时,UTF都停止。除GB18030外,其他