簡體   English   中英

如何擺脫UTF-8編碼的.txt中的“流氓字符”

[英]How to get rid of “Rogue Chars” in an .txt encoded under UTF-8

我的程序正在讀取使用UTF-8編碼的.txt。 我使用UTF-8的原因是要處理字符åäö。 我遇到的問題是,當讀取行時,似乎有一些“流氓”字符潛入字符串中,這在我嘗試將這些行存儲到變量中時會引起問題。 這是代碼:

public void Läsochlista()
{
    String Content = "";
    String[] Argument = new String[50];
    int index = 0;
    Log.d("steg1", "steg1");
    try{
        InputStream inputstream = openFileInput("text.txt");
        if(inputstream != null)
        {
            Log.d("steg2", "steg2");
            //InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
            //BufferedReader bufferreader = new BufferedReader(inputstreamreader);
            BufferedReader in = new BufferedReader(new InputStreamReader(inputstream, "UTF-8"));
            String reciveString = "";
            StringBuilder stringbuilder = new StringBuilder();

            while ((reciveString = in.readLine()) != null)
            {
                Argument[index] = reciveString;
                index++;
                if(index == 6)
                {
                    Log.d(Argument[0], String.valueOf((Argument[0].length())));
                    AllaPlatser.add(new Platser(Float.parseFloat(Argument[0]), Float.parseFloat(Argument[1]), Integer.parseInt(Argument[2]), Argument[3], Argument[4], Integer.parseInt(Argument[5])));
                    Log.d("En ny plats skapades", Argument[3]);
                    Arrays.fill(Argument, null);
                    index = 0;
                }
            }
            inputstream.close();
            Content = stringbuilder.toString();
        }
    }
    catch (FileNotFoundException e){
        Log.e("Filen", " Hittades inte");
    } catch (IOException e){
        Log.e("Filen", " Ej läsbar");
    }
}

現在,我得到了錯誤

Invalid float: "61.193521"

其中該行僅包含字符“ 61.193521”。 當我打印出在程序中讀取的字符串的長度時,輸出顯示“ 10”,這比該字符串應包含的字符多一個字符。 問題; 我如何擺脫那些看不見的“胭脂”字符? 為什么他們首先出現在這里?

當您將文件另存為“ UTF-8”時,您的編輯器可能正在文件的開頭寫入字節順序標記 (BOM)

查看您的編輯器中是否有一個選項可以保存不帶BOM的UTF-8。

顯然,BOM只是一個麻煩: UTF-8和不帶BOM的UTF-8有什么區別?

我知道您希望能夠在數據中包含擴展字符; 但是,您可能希望選擇其他編碼方式,例如Latin-1(ISO 8859-1)。

或者,您也可以在使用閱讀器包裝輸入流之前先從輸入流中讀取並丟棄前三個字節。

不幸的是,您沒有提供示例文本文件,因此無法完全使用代碼進行測試,這是基於猜測的理論答案,可能是原因所在:看起來這是與BOM相關的問題,您可能必須對此進行處理。 這里提供了一些相關的詳細信息: http : //www.rgagnon.com/javadetails/java-handle-utf8-file-with-bom.html這里有一些信息: 什么是XML BOM,如何檢測到它?

基本上有各種情況:

  1. 在一種情況下,當我們不使用正確的編碼進行讀寫時,就會遇到問題。
  2. 在另一種情況下,我們使用的編輯器或閱讀器不支持UTF-8
  3. 第三,當我們使用正確的編碼進行讀寫時,我們在文本編輯器中不會遇到問題,而在其他應用程序或程序中會遇到問題。 我認為您的問題與第三種情況有關。

在第三種情況下,我們可能必須使用程序刪除BOM或根據我們的上下文對其進行處理。 這是一些解決方案,我想您可能會發現有趣的事情: UTF-8文件讀取:第一個字符問題

您可以使用此線程答案中給出的代碼,也可以使用apache commons處理它: 字節順序標記會破壞Java中的文件讀取

暫無
暫無

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

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