2012-10-15 56 views
9

我在Java中使用文字字符串时遇到字符集问题。Java文字字符串:运行时错误的字符集

正如你可以在下面的图片看到的,我有一个名为TITULO的静态对象,它带有一个字符串常量参数“Título”。当我运行程序时,这个字符串被当作“T-tulo”。我不知道为什么。

Eclipse Debug View

我在探索Eclipse项目属性窗口和Tomcat设置的字符集设置,但所有的人都用UTF-8作为一个选项。

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

任何人都可以帮助我解决这个问题吗?

+0

似乎控制台被设置为某种其他编码,可能是cp1252或latin1。 –

+0

将“this.id = id”替换为“this.id = TITULO”。现在这个.id有7个字符或者6. –

+0

@DanielFischer不一定是控制台,但也许Eclipse通常使用错误的字符集?如果让JVM确定字符串的大小会发生什么?做'int len = id.length();'看看'len'的值在调试器中是什么。它可能是JVM编码不匹配。这些信息在调试时通过套接字传输,因此Eclipse可能试图使用与Tomcat不同的编码来确定它。除此之外,我不知道。 :3 – Brian

回答

1

是在eclipse编辑器的代码Tomcat的设置的URIEncoding为UTF-8是不一样的Tomcat正在执行的代码。

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

我最近已将这个正在运行的eclipse项目转换为maven项目。我可能在创建这个war文件的这个过程中执行了'mvn package'。

非常感谢所有人的帮助,我发现了这个解决方案。

0

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

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

+0

是的。在我更改我的代码以测试@Brian建议后,现在我知道我在编辑器中的代码不是正在运行的代码。我正在寻找这个不好的代码。 –

1

您可以尝试在server.xml

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

我试过了。但不起作用。新信息:我已将eclipse项目更改为maven项目。我运行了'mvn eclipse:clean eclipse:eclipse'并在eclipse上重新加载了这个项目。之后我已经清理了eclipse项目和Tomcat Work Directory。我从项目文件夹中删除旧的/ bin目录。现在,我意识到tomcat正在运行一个旧代码。我需要发现这个代码在哪里... –

+0

通常,Eclipse将代码部署到Tomcat:.metadata \ .plugins \ org.eclipse.wst.server.core \ tmp0 – Zagrev

相关问题