簡體   English   中英

如何讓eclipse在unicode中打印出奇怪的字符?

[英]How do I make eclipse print out weird characters in unicode?

所以我試圖讓我的程序輸出一個帶有名單列表的文本文件。 一些名字有奇怪的字符,如Åström。

我已經從以“UTF-8”編碼的網頁中抓取了這些名稱列表,或者至少我很確定它的確如此,因為頁面來源說

“meta http-equiv =”Content-Type“content =”text / html; charset = UTF-8“/”

這是我到目前為止所嘗試的:

public static void write(List<String> list) throws IOException  {
        Writer out = new OutputStreamWriter(new FileOutputStream("test.txt"), "UTF-8");
        try {
            for (int i=0;i<list.size();i++) {
                try {
                    byte[] utf8Bytes = list.get(i).getBytes("UTF-8");
                    out.write(new String(utf8Bytes, "UTF-8"));
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }

                out.write(System.getProperty("line.separator"));

            }
        }
        finally {
        out.close();
        }
    }

我有點困惑為什么它不起作用。 我得到的輸出是“Ã...ström”,這非常奇怪。

有人可以指點我正確的方向嗎? 謝謝!

在另一個不相關的說明中,除了笨重之外,是否有更簡單的方法將新行寫入文本文件

out.write(System.getProperty( “line.separator”));

我有? 我在網上看到了它並且它有效,但我只是想知道是否有更清潔的方式。

Eclipse > Preferences > General > Workspace > Text file encoding為UTF-8。

內容確實是UTF-8,如果打印到控制台,它似乎沒問題。 可能導致該問題的是字符串的解碼和編碼,這是不必要的。 而不是OutputStreamWriter嘗試使用java.io.PrintWriter。 它有println方法,最后用系統行分隔符打印出字符串。 它看起來像:

printStream.println(list.get(i));

此外,打開文件以查看它時嘗試使用瀏覽器。 它們允許您在打開后選擇編碼,以便您可以快速嘗試多種編碼以查看實際使用的內容。

記事本不是一個功能特別豐富的編輯器。 它將嘗試猜測文檔編碼,有時會出現意外結果 “純文本”文檔不帶有關於其編碼的任何元數據,這給它們帶來了某些限制。 Windows應用程序(包括記事本)通常依賴字節順序標記 (Java字符串中的U + FEFF或"\" )來確定編碼是否為Unicode格式。 這可能有助於記事本; 它會對你的網頁問題毫無用處。

HTML 4規范定義了如何設置輸出編碼 除了指定元編碼之外,還應設置Content-Type HTTP標頭。

您沒有在網絡應用中提及您正在使用的內容。 servlet應該設置內容類型setContentType("text/html; charset=UTF-8") ; JSP應該使用page指令來做同樣的事情。 其他視圖技術將提供類似的機制。


byte[] utf8Bytes = list.get(i).getBytes("UTF-8");
out.write(new String(utf8Bytes, "UTF-8"));

此代碼執行一些無用的操作; 它將字符數據從UTF-16轉碼為UTF-8,然后從UTF-8轉換回UTF-16,然后將數據寫入Writer (它將UTF-16再次轉碼為UTF-8)。 這段代碼是等效的:

String str = list.get(i);
out.write(str);

使用PrintWriter獲取換行支持。


您可以在此處此處此處閱讀有關Java中字符編碼的更多信息。

暫無
暫無

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

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