Проблемы с русским
Добавлено: 12 апр 2004, 14:27
Нужен класс, переводящий русские буквы в транслит. Я попробовал сделать - не выходит... проблема такая: в конструкторе создаю HashMap, закидываю такие пары:
chars.put("Ш", "SH");
далее в методе посимвольно перевожу в транслит.
public String toTranslit(String line) {
StringBuffer res = new StringBuffer();
for (int i=0; i<line.length(); i++) {
try {
String ch = new String(line.substring(i, i+1));
System.out.println(ch);
if (chars.get(ch)!=null) {
res.append((String)chars.get(ch));
} else {
res.append(ch);
}
}
catch (Exception e) {
e.printStackTrace();
}
}
return res.toString();
}
потом читаю текст из файла в кодировке Cp1251. Результаты вывожу в новый файл:
public static void main(String[] args) {
Convertor c = new Convertor();
try {
BufferedReader fin = new BufferedReader(new InputStreamReader(new FileInputStream("in.txt"), "Cp1251"));
String l = fin.readLine();
fin.close();
System.out.println(l);
PrintWriter fout = new PrintWriter(new FileWriter("out.txt"));
fout.println(l);
fout.println(c.toTranslit(l));
fout.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
В итоге в out.txt появляется мое слово русскими буквами 2 раза.
Думаю проблема в том, что в байт-кодах русские буквы из Hashtable сохранены неправильно, то есть не с теми кодами. Пробовал исходный файл сохранять в Cp1251 - все равно не катит. Что делать? Может у кого есть готовый класс?
chars.put("Ш", "SH");
далее в методе посимвольно перевожу в транслит.
public String toTranslit(String line) {
StringBuffer res = new StringBuffer();
for (int i=0; i<line.length(); i++) {
try {
String ch = new String(line.substring(i, i+1));
System.out.println(ch);
if (chars.get(ch)!=null) {
res.append((String)chars.get(ch));
} else {
res.append(ch);
}
}
catch (Exception e) {
e.printStackTrace();
}
}
return res.toString();
}
потом читаю текст из файла в кодировке Cp1251. Результаты вывожу в новый файл:
public static void main(String[] args) {
Convertor c = new Convertor();
try {
BufferedReader fin = new BufferedReader(new InputStreamReader(new FileInputStream("in.txt"), "Cp1251"));
String l = fin.readLine();
fin.close();
System.out.println(l);
PrintWriter fout = new PrintWriter(new FileWriter("out.txt"));
fout.println(l);
fout.println(c.toTranslit(l));
fout.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
В итоге в out.txt появляется мое слово русскими буквами 2 раза.
Думаю проблема в том, что в байт-кодах русские буквы из Hashtable сохранены неправильно, то есть не с теми кодами. Пробовал исходный файл сохранять в Cp1251 - все равно не катит. Что делать? Может у кого есть готовый класс?