0

ここで解決できない問題があります。誰か助けてもらえますか?

さて、テキストを正規化するプログラムを作成しようとしています。複数の空のスペースを削除し、元のファイルから他の文字を出力し、スペースと開始記号と終了記号を挿入します。

したがって、変換後、txt ファイルを作成して開くと、次の内容が表示されます。

numa situaã § ã £ o de emergãªncia mã © dica

ご覧のとおり、私が望まない奇妙な文字がいくつかあります。おそらく、エンコードのせいでしょうか?? これは私の言語であるポルトガル語のテキストです。

これが私のコードです。どうすれば修正できますか?

public static void main(String[] args) throws IOException {

        Charset encoding = Charset.defaultCharset();

        InputStream in = new FileInputStream(new File("data.txt"));
        Reader reader = new InputStreamReader(in, encoding);
        Reader buffer = new BufferedReader(reader);
        StringBuilder normalizedLanguage = new StringBuilder("<");
        int r;
        while ((r = buffer.read()) != -1) {
            char ch = (char) r;




            boolean newline = false;
            boolean hasLetterBefore = false;
            boolean hasLetterAfter = false;
            char symbol = '-';
            int lines = 0;

            if (newline)
            {
                normalizedLanguage.append("\n<");
            }


            if (ch == '\r' || ch == '\n' )
            {
                lines++;
                normalizedLanguage.append(">");
                newline = true;
                hasLetterBefore = false;


            }
            else if (Character.isLetterOrDigit(ch))
            {
                if (hasLetterBefore == true)
                {
                    normalizedLanguage.append(Character.toString(symbol) + Character.toString(Character.toLowerCase(ch)));
                }else{
                    normalizedLanguage.append(Character.toString(Character.toLowerCase(ch)));
                }


                newline = false;
                hasLetterBefore = true;
            }
            else if (ch == ' ')
            {
                normalizedLanguage.append(Character.toString(ch));
                newline = false;
                hasLetterBefore = false;
            }
            else if (ch == '\t')
            {
                System.out.println("Tab detected: " + ch);
                newline = false;
                hasLetterBefore = false;
            }
            else
            {
                //Símbolos, entre outros..
                if (!hasLetterBefore)
                {
                    normalizedLanguage.append(" " + Character.toString(ch) + " ");
                }
                else
                {
                    symbol = ch;
                }
                newline = false;

            }


        }

        String normalizedLanguageString = normalizedLanguage.toString().trim().replaceAll(" +", " ");

        PrintWriter out = new PrintWriter("data_after.txt");

        out.println(normalizedLanguageString);
        out.close();

        buffer.close();
        reader.close();
        in.close();

    }

事前にどうもありがとうございました ;)

4

1 に答える 1

0

問題は、別の文字セットエンコーディングを使用して解決されました:)

この行を変更します。

Charset encoding = Charset.defaultCharset();

に:

Charset encoding = Charset.forName("UTF8");

とにかくどうもありがとう

于 2014-10-23T11:04:32.023 に答える