从文件读取的重音字符在Eclipse下具有与控制台不同的值

时间:2016-02-23 23:24:27

标签: java eclipse windows

我正在尝试匹配下拉选项:

Cabina Económica

针对从属性文件导入的String。

我在使用

时遇到了问题
"//a[text()='" + cabin + "']"

因此改为:

final String translateFrom = "ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜÉÈÊÀÁÂÒÓÔÙÚÛÇÅÏÕÑŒäöüéèêàáâòóôùúûçåïõñœ";
final String translateTo   = "abcdefghijklmnopqrstuvwxyzaoueeeaaaooouuucaionoaoueeeaaaooouuucaiono";
"//a[translate(text(),'"+translateFrom+"','"+translateTo+"')=translate('"+cabin+"', '"+translateFrom+"', '"+translateTo+"')]";

在Eclipse中测试时效果很好,但在Windows 7控制台下运行时失败了:

main() Terminating due to error/exception: Unable to locate element: ....)=translate('Cabina Econ├│mica'....

如果我从页面打印下拉选项,则在Windows控制台下显示为:

Cabina Econ≤mica

≤似乎是ASCII F3,它与我在Eclipse下检查(两个)字符串时所看到的相匹配。

但是├│,从属性文件中读取的值虽然在Eclipse下是F3,但在Windows控制台下似乎是C3B3。

F3是ó的Unicode值; C3B3是其UTF-8值。

为什么在Eclipse下(通过Spring)读取属性文件会在Windows控制台下读取它时产生不同的结果,我需要做些什么才能使它们相等?

更新

我正在阅读的网页是用

定义的
<meta ... charset=utf-8>

所以我假设某事(Selenium?)在我看到它之前将它翻译成utf-16或utf-32(其中ó= x'f3')。

而Spring的属性文件似乎在控制台下读取为utf-8,但在Eclipse下读取为16/32。

更新2

进一步的研究表明,这可能与Spring的属性文件加载有关。我在:

开了一个新问题

https://stackoverflow.com/questions/35612302/spring-loads-property-files-differently-under-windows-console-than-under-eclipse

并认为最好删除这个(除非有人反对?)

2 个答案:

答案 0 :(得分:2)

在eclipse的首选项中检查控制台的编码。它可能与Windows控制台使用的编码不同。

答案 1 :(得分:0)

信息不确定但可能的回答:

实际上7F以上的任何东西都不是ASCII; Windows控制台窗口(通常不正确地称为“DOS”提示或窗口)使用Windows 'OEM' (legacy) code page usually 437,其中F3是字符。并且两个字符├│是C3 B3,您正确识别为Unicode F3 ó的UTF-8。可以通过显式编码到IBM437来修复Windows控制台显示,但是您需要为控制台显示执行而不是其他地方,包括不是Windows 文件因为文件使用所谓的“ANSI”(实际上是CP1252)单字节代码或几种Unicode编码之一(两种字节序中的UTF-8或UTF-16)。

Windows上的I / O(特别是但不仅仅是文件)的Java 默认编码是CP1252,而在Unix上,它通常并不总是UTF-8。你的Eclipse是Unix吗?我在Windows上的Eclipse(Indigo)默认使用CP1252作为普通Java,但我不知道Spring是否做了什么来覆盖它。 如果它使用默认值来读取您的文件,您可以使用系统属性file.encoding=utf-8设置该默认值。