簡體   English   中英

在Eclipse下,從文件讀取的重音字符與控制台的值不同

[英]Accented characters read from file has different value under Eclipse than console

我正在嘗試匹配一個下拉選項:

Cabina Económica

從屬性文件導入的字符串。

我在使用時遇到問題

"//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>

因此,我假設在看到某物(硒?)之前將其翻譯為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

並認為最好刪除此對象(除非有人反對?)

在eclipse的首選項中檢查控制台的編碼。 它可能與Windows控制台使用的編碼不同。

信息不確定但可能的答案:

實際上,高於7F的不是ASCII。 Windows控制台窗口(通常不正確地稱為“ DOS”提示或窗口)使用Windows“ OEM”(舊版)代碼頁,通常為437 ,其中F3是字符 而且,這兩個字符├│是C3 B3你正確識別為UTF-8的Unicode F3 ó 它可以通過明確編碼,以修復Windows控制台顯示IBM437 ,但你需要在控制台顯示和不能做到這一點的其他地方,包括非Windows 文件 ,因為文件請使用所謂的“ANSI”(真CP1252)單字節代碼或幾種Unicode編碼中的一種(字節序為UTF-8或UTF-16)。

在Windows上,Java的I / O(特別是但不僅是文件)的默認編碼為CP1252,而在Unix上,它通常並非始終為UTF-8。 您的Eclipse在Unix上嗎? Windows上的Eclipse(Indigo)默認將CP1252用於純Java,但是我不知道Spring是否會做任何事情來覆蓋它。 如果它使用默認值讀取文件,則可以使用系統屬性file.encoding=utf-8設置該默認值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM