簡體   English   中英

如何從 url 讀取 csv 文件,java 中有 utf-8 個字符

[英]How to read csv file from url with utf-8 chars in java

如何正確讀取java中的a.csv文件? 我有一個 utf-8 編碼的文件,但無法正確讀取某些字符。

在此處輸入圖像描述

我的代碼:

String link = new String("https://stat.gov.pl/download/gfx/portalinformacyjny/pl/defaultstronaopisowa/4741/1/1/miesieczne_wskazniki_cen_towarow_i_uslug_konsumpcyjnych_od_1982_roku.csv");

URL url = new URL(link);

BufferedReader read = new BufferedReader(
        new InputStreamReader(url.openStream(), StandardCharsets.UTF_8));
String i;
while ((i = read.readLine()) != null)
    System.out.println(i);
read.close();

https://stat.gov.pl/download/gfx/portalinformacyjny/pl/defaultstronaopisowa/4741/1/1/miesieczne_wskazniki_cen_towarow_i_uslug_konsumpcyjnych_od_1982_roku.csv

那不是UTF-8!

因此,為什么您的代碼失敗了。 您假設它是 UTF-8。它不是。 此外,標頭告訴您它是“二進制”(實際上不是,但重點是,服務器也沒有給您字符集),因此您必須猜測。 可能是Windows-1250。

這個字節序列在那個 CSV 中:

57 61 72 74 6F 9C E6

最后兩個是“有趣的”(另一個在 ASCII 塊中,所以幾乎每個編碼都相同)。 所以那讀Warto? 在哪里? 是有趣的部分。 如果這是Windows-1250 ,則拼寫為 Wartość。 谷歌告訴我那是波蘭語。

所以,你需要做三件事來解決這個問題:

  1. 不要假設一切都是 UTF_8。
  2. 學習 mojibake 偵探技能。 這涉及原始下載內容,使用十六進制編輯器,尋找看起來像熟悉術語一半的內容(例如 Warto..),然后查找可能的代碼頁並檢查字節是否與您認為的相符。 這是一個拖累。 它沒有捷徑,當服務器不告訴你編碼是什么時,mojibake 偵探技能是你唯一的選擇。
  3. StandardCharsets.UTF_8替換為"Windows-1250" ,我很確定它適用於任何 JVM。如果不是,oof。 您必須自己編寫該代碼頁並將其注冊為字符集。

暫無
暫無

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

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