[英]Reading special characters from File - Java
我正在從具有以下屬性的文本文件中讀取數據:
編碼:ANSI
文件類型:PC
現在,該文件包含許多特殊字符,例如度數符號(º)等。我正在使用以下代碼讀取此文件:
File file = new File("C:\\X\\Y\\SpecialCharacter.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
如果文件編碼為ANSI,則上面的代碼無法正確讀取文件行中的特殊字符:
“降低熱量並慢火煮,直到產品達到內部溫度165ºF”, reader.readLine()
將輸出:
“降低熱量並慢燉,直到產品達到內部溫度165°F”
當我將文件的編碼更改為UTF-8時,該行將按文件中的原樣進行讀取,而不會弄亂特殊字符。
我的問題是,數據什么時候弄亂了? 將數據存儲在文件中還是從文件中讀取數據? 在記事本中打開文件會正確顯示所有特殊字符。 這是怎么發生的?
十六進制轉儲輸出:
-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F
00000000- 4C 6F 77 65 72 20 68 65 61 74 20 61 6E 64 20 73 [Lower heat and s]
00000001- 69 6D 6D 65 72 20 75 6E 74 69 6C 20 70 72 6F 64 [immer until prod]
00000002- 75 63 74 20 72 65 61 63 68 65 73 20 69 6E 74 65 [uct reaches inte]
00000003- 72 6E 61 6C 20 74 65 6D 70 65 72 61 74 75 72 65 [rnal temperature]
00000004- 20 6F 66 20 31 36 35 BA 46 [ of 165.F ]
“ ANSI”不是特定的編碼-它是編碼的完整集合 。 讀取文件時,您需要使用正確的編碼。 例如,您完全有可能使用Windows-1252編碼,這意味着您可能想嘗試傳遞“ Cp1252”作為編碼名稱。
實際上,您傳遞的是“ UTF-8”, 它不是通常稱為ANSI的編碼之一。 您需要找出文件使用的確切編碼,然后在InputStreamReader
參數中指定該編碼。
我的問題是,數據什么時候弄亂了? 將數據存儲在文件中還是從文件中讀取數據?
假設編碼能夠代表您感興趣的所有字符,那么僅當您讀取文件時才可以。 基本上,您試圖讀取它,就像它實際上是另一種編碼一樣。 記事本正在執行某種啟發式編碼檢測,或者恰好在這種特定情況下使用正確的默認值。
new InputStreamReader(new FileInputStream(file), "UTF-8")
用於讀取UFT-8
編碼的文件:如果您要讀取編碼不同的文件(例如Win 1252),則應相應地更改第二個參數。
文本文件永遠不會“陷入混亂”地進行編碼:它以某種編碼存儲,並且在讀取文本文件時應使用相同的編碼,以便系統可以解釋該原始字節流並關聯每個[字節組] [s]帶有正確的字符[或Unicode代碼點,如果我們正在執行Unicode],則可以看到“正確的”字形。
希望這可以澄清一點。
干杯
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.