我正在尝试匹配下拉选项:
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。
进一步的研究表明,这可能与Spring的属性文件加载有关。我在:
开了一个新问题并认为最好删除这个(除非有人反对?)
答案 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
设置该默认值。