2013-08-27 53 views
1

有關java native2ascii工具的一點疑惑。爲tool in Java 6定義:關於java native2ascii工具的困惑

一個文件轉換與天然編碼的字符(字符,這是 非拉丁1和非Unicode),以一個與Unicode編碼的字符。

那麼爲什麼它還將屬於拉丁語1個表(如é)的字符轉換爲unicode編碼的表示形式(\ u00e9)???

拉丁語1(ISO 8859-1)表可在這裏例如http://en.wikipedia.org/wiki/ISO/IEC_8859-1#Codepage_layout

這意味着,我不能直接與屬性文件的一些歐洲語言,如法語工作。

爲了澄清我的問題:

native2ascii的轉換不應該latin1的字符(根據其描述)。 é是一個有效的拉丁字符。那爲什麼要轉換?

回答

0

可以處理其屬性文件與法國和其他字符。屬性接受\uxxxx序列。您可以直接使用國家字符,因爲屬性已經加載(讀取器讀取器)方法。然後,該文件可以在任何編碼,您將提供該文件正確解碼閱讀器,如new InputStreamReader(new FileInputStream(1.properities), Charset.forName("ISO-8859-1"));

我也同意的native2ascii不應該轉換é因爲它是一個合法的Latin-1字符和文檔說Latin-1的字符沒有轉換。

+0

是的,但我不能提供一個讀者,我必須使用默認的。這意味着我不能直接在文件中輸入é。我必須把\ uxxxx和使用例如maven使用native2ascii,而生成產品 – Kemoda

+0

進一步我的問題是:爲什麼native2ascii轉換拉丁文字符時,它不應該(基於工具描述)。文檔是否錯誤? – Kemoda

+0

我也認爲文檔是錯誤的,他們應該說非ASCII字符,但請注意,Properties.load(InputStream)真的讀取文件,假設它是ISO88591,所以它應該讀取ISO88591道具文件確定沒有\ uxxxx –

0

混亂的根源可能是文檔與Java版本改變7.

在Java 6 Solaris和UNIX(http://docs.oracle.com/javase/6/docs/technotes/tools/solaris/native2ascii.html)的文件說:「Java編譯器和其它Java工具只能處理文件,這包含拉丁-1和/或Unicode編碼(\ udddd表示)字符。native2ascii的轉換,其含有其它字符編碼到文件中含有的Latin-1和/或Unicode編碼charaters文件。

我認爲它清楚地意味着輸出是Latin-1,而不在Latin-1中的字符將在輸出中進行Unicode編碼。

我檢查的OpenJDK 6上Ubuntu和有不符合的文件用native2ascii,它輸出Latin-1字符爲Unicode編碼。所以在這種情況下,文檔或native2ascii工具都可能被認爲是不正確的。

但是在Java中7和Java 8文檔(http://docs.oracle.com/javase/7/docs/technotes/tools/solaris/native2ascii.htmlhttps://docs.oracle.com/javase/8/docs/technotes/tools/unix/native2ascii.html)說:「native2ascii的轉換被編碼到由Java運行時環境支持以ASCII編碼的文件中的任何字符編碼文件,使用Unicode轉義字符(」所有不屬於ASCII字符集的字符

我在Ubuntu上檢查了Openjdk 8 native2ascii,發現它相應地工作,它將Latin-1字符轉換爲Unicode編碼。

請注意,7/8文檔中還提到「此過程是包含不在ISO-8859-1字符集中的字符的屬性文件所必需的」。

我認爲這顯然意味着包含Latin-1(又名ISO-8859-1)編碼字符的屬性文件仍然有效。