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

编码困难

太叔景曜
2023-03-14

我正在处理的代码有一些编码问题。接收到一个加密字符串,该字符串用ISO-8859-1解码。然后将该字符串放入具有UTF-8编码的DB中。检索该字符串时,它仍然是ISO-8859-1,没有问题。问题是,我还需要能够检索这个字符串作为UTF-8,但我还没有成功。

我尝试将字符串从ISO转换为UTF-8时,从DB检索使用此方法:

private String convertIsoToUtf8(String isoLatin) {
    try {
        return new String(isoLatin.getBytes("ISO_8859_1"), "UTF_8");
    } catch (UnsupportedEncodingException e) {
        return isoLatin;
    }
}

不幸的是,在这种情况下,特殊字符只是显示为问号。

原始字符串:测试从DB检索并转换为UTF-8后的示例输出:测试???

更新:在阅读了评论中提供的链接后,我设法把它弄对了。因为数据库已经是UTF-8编码的,所以我需要做的就是:

return new String(isoLatin.getBytes("UTF-8"));

共有1个答案

刘野
2023-03-14

当你已经有了一个字符串-对象时,纠正任何编码问题通常都为时已晚,因为一些信息可能已经丢失了-想想那些无法一对一映射到java内部UTF-16表示的字符。

处理字符编码的正确位置是您获取字符串的时刻:从文件读取输入时(在InputStreamReader上设置正确的编码),转换从解密获得的字节[]时,从数据库读取时(这应该由您的JDBC驱动程序处理),等等。

在进行反向操作时,还要注意正确处理编码。虽然在大多数情况下,当您使用默认编码时,它似乎可以正常工作,但您可能迟早会遇到难以解决的问题(就像您现在所做的那样)。

注意:还要记住你用什么工具来显示你的输出:有些控制台不会显示UTF-16或UTF-8,请检查你用来查看文件的编辑器的编码设置等。有时你的输出可能是正确的,只是不能正确显示。

 类似资料:
  • 问题内容: 不确定这是否是编程问题。我开始怀疑是这样的…但是后来我在Windows控制台而不是Cygwin控制台中运行了有问题的Java程序(可执行jar)…并且运行良好:输出重音很好,接受重音输入也很好。因此,以下内容仅适用于Cygwin控制台。 我正在处理一些法语文本。当打印带重音符号的字符()时,将打印一种“哈希框”。我在这里看到了另一个问题,但是没有给出解决方案或适当的解释。 当我输入带重

  • 有几个众所周知的python代码样式规则,它们被认为是默认的,我试图坚持: 换行,使其不超过79个字符。 保持缩进4个空格长。 另一个常见的编程建议是 避免全局变量 换句话说,应该始终使用接受所有变量作为参数的函数,并避免直接从更高范围读取的类似Pascal的过程。 然而,在某些情况下,人们肯定应该打破其中的一些规则。例如,如果涉及具有长参数列表的函数。它们有两个不同的问题: 首先,在凹凸不平的街

  • 在这一页上https://www.bestbuy.ca/en-ca/category/laptops-macbooks/20352(这是笔记本电脑结果页面,其中列出了许多笔记本电脑,我正在尝试获取这台电脑) WebElement--“HP 15.6”笔记本电脑-银色(Intel Core i3-1005G1/256GB SSD/8GB RAM/Windows 10),使用xpath,下面是我的xp

  • 问题:对一组没有重复的数字进行乱序。 答: 我的问题:Math.floor(Math.random()*n)你从数组的长度中得到一个随机索引。我不明白,这个代码不能重复吗?假设长度是3。公式不能得到2的索引和另一个2的索引,从而产生重复索引。有人能澄清一些我误解的事情吗?谢谢。Math.random自动撤回已经使用的索引吗?

  • 我是Python的初学者,我正试图学习如何使用数据结构,如JSON对象,但我在试图从JSON对象中实际获取数据时遇到了困难。 我可以通过已经有的代码打印文件中的数据,但是我只想打印某个值,比如的值。我如何使用我已经有的代码打印这个?