2010-01-25 98 views
1

在代碼的最後一部分,我打印了Reader給我的東西。但它只是假的,我哪裏錯了?從Java ZIP壓縮文件中提取UTF-16編碼文件

public static void read_impl(File file, String targetFile) { 
    // Create zipfile input stream 
    FileInputStream stream = new FileInputStream(file); 
    ZipInputStream zipFile = new ZipInputStream(new BufferedInputStream(stream)); 

    // Im looking for a specific file/entry 
    while (!zipFile.getNextEntry().getName().equals(targetFile)) { 
     zipFile.getNextEntry(); 
    } 

    // Next step in api requires a reader 
    // The target file is a UTF-16 encoded text file 
    InputStreamReader reader = new InputStreamReader(zipFile, Charset.forName("UTF-16")); 

    // I cant make sense of what this print 
    char buf[] = new char[1]; 
    while (reader.read(buf, 0, 1) != -1) { 
     System.out.print(buf); 
    } 
} 
+1

該文件包含什麼內容,取而代之的是什麼? 看來這甚至沒有編譯,考慮到你使用的是「字符串」參數而不是「字符串」。 – 2010-01-25 10:13:45

+0

謝謝,Ive已將字符串更改爲String,實際參數是硬編碼的,但爲了清晰起見,我在此處更改了源代碼。 – Mizipzor 2010-01-25 10:20:51

+0

有問題的文件是一個xml文件,但在這一步中不重要(不解析它),所以我們可以將其稱爲純文本。 – Mizipzor 2010-01-25 10:22:47

回答

1

我猜你錯誤的地方是相信該文件是UTF-16編碼的。

如果你不解碼它們,你能顯示一些初始字節值嗎?

+0

不幸的是,你是對的。客戶聲稱它是UTF-16。我很天真地認爲它沒有自己檢查。實際上,它是普通的舊UTF-8。至少這是一個簡單的解決方案。 :) – Mizipzor 2010-01-25 10:43:13

0

你使用char數組有點沒有意義,儘管乍一看它應該工作。試試這個:

int c; 
while ((c = reader.read()) != -1) { 
    System.out.print((char)c); 
} 

如果這也不行,那麼也許你得到了錯誤的文件,或文件不包含你所想象的那樣,或者控制檯不能顯示其包含的字符。

+0

它打印與我的初始源完全相同的東西。控制檯是Netbeans IDE的輸出窗口,afaik能夠顯示這些字符。 – Mizipzor 2010-01-25 10:21:51

+0

如果沒有最重要的信息,很難進行診斷:文件包含哪些字符,以及打印的是什麼「假」。你顯示的代碼應該可以工作。 – 2010-01-25 10:39:20