HashMap уничтожает кодирование? - PullRequest
3 голосов
/ 08 декабря 2011

Я должен признать, что я не очень разбираюсь в кодировании и т. Д. У меня следующая проблема: моя программа должна читать текстовый файл, который содержит не только стандартную информацию. ASCII, но "специальные символы и языки", такие как "..офіціалнов назвов Російска.." Итак, давайте предположим, что это содержимое файла: офіціалнов назвов Російска

Теперь я хотел бы разделить содержимое всего файла на отдельные слова и создать еще один файл, в котором все эти слова будут перечислены в виде строк:

  • офіціалнов
  • назвов
  • Російска

Моя проблема: если я помещаю эти отдельные слова в HashMap и считываю значения из него -> кодировка теряется. Это мой код:

    final StringBuffer fileData = new StringBuffer(1000);
    final BufferedReader reader = new BufferedReader(
            new FileReader("fileIn.txt"));

    char[] buf = new char[1024];
    int numRead = 0;
    while ((numRead = reader.read(buf)) != -1)
    {
        final String readData = String.valueOf(buf, 0, numRead);
        fileData.append(readData);
        buf = new char[1024];
    }
    reader.close();
    String mergedContent = fileData.toString();


    mergedContent = mergedContent.replaceAll("\\<.*?>", " ");
    mergedContent = mergedContent.replaceAll("\\r\\n|\\r|\\n", " ");

    final BufferedWriter out = new BufferedWriter(
            new OutputStreamWriter(
                    new FileOutputStream("fileOut.txt")));

    final HashMap<String, String> wordsMap = new HashMap<String, String>();

    final String test[] = mergedContent.split(" ");


    for (final String string : test)
    {

        wordsMap.put(string, string);
    }

    for (final String string : wordsMap.values())
    {
        out.write(string + "\n");
    }


    out.close();

Этот фрагмент уничтожает кодировку. Самое смешное: если я не помещаю значения в HashMap, а сразу сохраняю их в выходной файл, например:

...
        for (final String string : test)
        {
                        out.write(string + "\n");
            //wordsMap.put(string, string);
        }

        //for (final String string : wordsMap.values())
        //{
        //  out.write(string + "\n");
        //}


        out.close();

... тогда все работает так, как я ожидал.

Что я делаю не так?

1 Ответ

9 голосов
/ 08 декабря 2011

Попробуйте использовать new InputStreamReader(new FileInputStream(file), "UTF-8") и затем то же самое с выводом.И убедитесь, что ваш файл закодирован в UTF-8

Хэш-карта не может ничего сделать для кодировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...