【问题标题】:Java literal string: wrong charset at runtimeJava 文字字符串:运行时错误的字符集
【发布时间】:2012-10-15 23:07:02
【问题描述】:

我在 Java 中遇到文字字符串的字符集问题。

如下图所示,我有一个名为 TITULO 的静态对象,带有一个文字字符串常量参数“Título”。当我运行程序时,这个字符串被读作“TÃ-tulo”。我不知道为什么。

我在 Eclipse 项目属性窗口和 Tomcat 设置中探索了字符集设置,但它们都使用 UTF-8 作为选项。

我正在运行 Tomcat 7、Eclipse Helios 和 Windows SO。

谁能帮我解决这个问题?

【问题讨论】:

  • 似乎控制台设置为其他编码,可能是 cp1252 或 latin1。
  • 将“this.id = id”替换为“this.id = TITULO”。现在 this.id 有 7 个字符还是 6 个字符。
  • @DanielFischer 不一定是控制台,但也许 Eclipse 通常使用错误的字符集?如果让 JVM 确定字符串的大小会怎样?执行int len = id.length(); 并查看len 在调试器中的值。可能是 JVM 编码不匹配。当您调试时,此信息通过套接字传输,所以也许 Eclipse 正在尝试使用与 Tomcat 不同的编码来确定它?除此之外,我没有任何线索。 :3
  • 谢谢@DanielFischer。当我添加int len=id.length() 进行调试时,我意识到正在运行的代码与我当前在编辑器中的代码不同。我认为 Tomcat 正在运行一个非常古老的编译代码。我尝试清理所有项目和 Tomcat 目录,但不起作用。

标签: java string character-encoding


【解决方案1】:

您可以尝试在 server.xml 中将 Tomcat URIEncoding 设置为 UTF-8

<Connector port="8090" URIEncoding="UTF-8"/>

【讨论】:

  • 我试过了。但不工作。新信息:我已将我的 eclipse 项目更改为 maven 项目。我跑了mvn eclipse:clean eclipse:eclipse 并在eclipse 重新加载了项目。之后我清理了 eclipse 项目和 Tomcat 工作目录。我从项目文件夹中删除旧的 /bin 目录。现在,我意识到 tomcat 正在运行旧代码。我需要发现这段代码在哪里......
  • 通常情况下,Eclipse 会在此处将代码部署到 Tomcat:.metadata\.plugins\org.eclipse.wst.server.core\tmp0
【解决方案2】:

eclipse编辑器里的代码和tomcat执行的代码不一样

我在 /target 文件夹中找到了一个 .war 文件。我删除了这个战争文件并且有效! tomcat 正在运行这个旧的 war 文件中的类。

我最近将这个正在运行的 Eclipse 项目转换为一个 Maven 项目。我可能在创建此 war 文件的过程中执行了“mvn 包”。

感谢大家帮助我找到了这个解决方案。

【讨论】:

    【解决方案3】:

    我相信您正在查看的字符串 (this.id) 实际上不是静态常量字符串 Titulo。

    在您的代码中,您正在读取正确的 unicode String Titulo,将其转换为字节数组,然后将其转换回字符串并将其传递给 Style 的构造函数。字符串在转换过程中被损坏。不能多说,除非你显示调用 Style 的构造函数的代码的堆栈跟踪。

    【讨论】:

    • 是的。在我更改代码以测试@Brian 建议后,现在我知道我在编辑器中的代码不是正在运行的代码。我正在寻找这个糟糕的代码。
    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    相关资源
    最近更新 更多