2015-06-10 17 views
3

我試圖確定是否使用確定ISO-8859-1 VS US-ASCII字符集

PrintWriter pw = new PrintWriter(outputFilename, "ISO-8859-1"); 

PrintWriter pw = new PrintWriter(outputFilename, "US-ASCII"); 

我在讀All about character sets確定字符集的示例文件我必須通過java代碼以相同的編碼創建。

當我的示例文件中包含的「歐洲」字母(挪威語:A○℃),那麼下面的命令告訴我該文件的編碼是「ISO-8859-1」

file -bi example.txt 

然而,當我走一個相同的示例文件的副本,並修改它以包含不同的數據,沒有任何挪威語文本(比方說,我用「Bjorn」替換「Bjørn」),然後同樣的命令告訴我文件編碼是「us-ascii」。

file -bi example-no-european-letters.txt 

這是什麼意思?如果沒有「歐洲」字符,ISO-8859-1實際上與US-ASCII相同嗎?

我應該只使用字符集「ISO-8559-1」,一切都會好嗎?

+0

你想在一個名爲'變量使用'PrintWriter' inputStream' ?這聽起來倒退了。 – Kayaman

+0

你說得對 - 我的錯誤。編輯修復。 – vikingsteve

回答

5

如果該文件只包含7位US-ASCII個字符,則可將其讀爲US-ASCII。它沒有告訴任何關於字符集的意圖。可能只是巧合,沒有需要不同編碼的字符。 ISO-8859-1(和-15)是一種常見的歐洲編碼,能夠編碼和其他字符,前127個字符與US-ASCII相同(爲了方便起見,通常是這樣)。

但是,你不能只選擇一種編碼,並假設「一切都會好的」。非常常見的UTF-8編碼也包含US-ASCII字符集,但它會將例如äöå字符編碼爲兩個字節,而不是ISO-8859-1的一個字節。

TL; DR:不要假設有編碼的東西。找出有什麼打算和使用。如果找不到,請觀察數據以找出正確的字符集的使用方式(正如您自己所指出的,多種編碼至少可以暫時運行)。

1

這取決於我們在相應文檔中使用的不同類型的字符。 ASCII是7位字符集,ISO-8859-1是8位字符集,支持一些附加字符。但是,大多數情況下,如果您要從inputstream複製文檔,我推薦使用ISO-8859-1字符集。它可以用於記事本和MS字等文本文件。

如果您使用的是一些不同的國際字符,我們需要檢查哪些支持相應字符集的特定字符如UTF-8 ..