簡體   English   中英

將文件從cp1252轉換為utf -8 java

[英]Convert file from Cp1252 to utf -8 java

用戶上傳字符編碼為Cp1252的文件

由於我的mysql表列的排序規則為utf8_bin,因此我嘗試在使用LOAD DATA INFILE命令將數據放入表之前將文件轉換為utf-8。

Java源代碼:

OutputStream output = new FileOutputStream(destpath);
InputStream input = new FileInputStream(filepath);
BufferedReader reader = new BufferedReader(new InputStreamReader(input, "windows-1252"));
BufferedWriter writ = new BufferedWriter(new OutputStreamWriter(output, "UTF8"));
String in;
while ((in = reader.readLine()) != null) {
    writ.write(in);
    writ.newLine();
}
writ.flush();
writ.close();

似乎字符轉換不正確。 轉換后的unicode文件在多個位置都有``和''框符號。 如何有效地將文件轉換為uft-8? 謝謝。

驗證轉換過程的一種方法是將字符集解碼器和編碼器配置為對錯誤進行緊急救助,而不是用特殊字符靜默替換錯誤字符:

CharsetDecoder inDec=Charset.forName("windows-1252").newDecoder()
  .onMalformedInput(CodingErrorAction.REPORT)
  .onUnmappableCharacter(CodingErrorAction.REPORT);

CharsetEncoder outEnc=StandardCharsets.UTF_8.newEncoder()
  .onMalformedInput(CodingErrorAction.REPORT)
  .onUnmappableCharacter(CodingErrorAction.REPORT);

try(FileInputStream is=new FileInputStream(filepath);
    BufferedReader reader=new BufferedReader(new InputStreamReader(is, inDec));
    FileOutputStream fw=new FileOutputStream(destpath);
    BufferedWriter out=new BufferedWriter(new OutputStreamWriter(fw, outEnc))) {

    for(String in; (in = reader.readLine()) != null; ) {
        out.write(in);
        out.newLine();
    }
}

請注意,此處將輸出編碼器配置為對稱,但是UTF-8能夠對每個unicode字符進行編碼,但是,如果您想使用相同的代碼執行其他轉換,則將其對稱將很有幫助。

此外,請注意,如果輸入文件的編碼不同,這將無濟於事,但錯誤解釋字節會導致有效字符。 要考慮的一件事是輸入編碼"windows-1252"實際上意味着系統的默認編碼(以及它是否確實相同)。 如果有疑問,可以使用Charset.defaultCharset()代替Charset.forName("windows-1252") ,而實際上要轉換為defaultUTF-8

暫無
暫無

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

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