Я должен признать, что я не очень разбираюсь в кодировании и т. Д. У меня следующая проблема: моя программа должна читать текстовый файл, который содержит не только стандартную информацию. 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();
... тогда все работает так, как я ожидал.
Что я делаю не так?