16 июня 2008

Преобразование кодировок

Есть например у нас непонятная строка в непонятной кодировке :
привет
Определить в какой кодировке сейчас находиться строка и пере-конвертировать в
"правильную" кодировку можно с помощью следующего выражения:
строки:
result = new String(new String(some_string.getBytes(),from_enc).getBytes(to_enc));
где
some_string - строка с непонятной кодировкой
from_enc - текущая предположительная кодировка
to_enc - в какую кодировку следует преобразовать строку
например:
result = new String(new String("привет".getBytes(),"ASCII").getBytes("KOI8_R"));

Дополнение 1. Список кодировок, используемых в Java.
"ASCII",
"ISO8859_1","ISO8859_2","ISO8859_3","ISO8859_4","ISO8859_5",
"ISO8859_6","ISO8859_7","ISO8859_8","ISO8859_9",
"Big5",
"Cp037",
"Cp1006" ,"Cp1025","Cp1026","Cp1046","Cp1097","Cp1098",
"Cp1112" ,"Cp1122","Cp1123","Cp1124",
"Cp1250" ,"Cp1251","Cp1252","Cp1253","Cp1254","Cp1255",
"Cp1256" ,"Cp1257","Cp1258","Cp1381","Cp1383",
"Cp273" ,"Cp277" ,"Cp278" ,"Cp280" ,"Cp284" ,"Cp285","Cp297",
"Cp33722","Cp420" ,"Cp424" ,"Cp437" ,"Cp500" ,"Cp737","Cp775",
"Cp838" ,"Cp850" ,"Cp852" ,"Cp855" ,"Cp857" ,
"Cp860" ,"Cp861" ,"Cp862" ,"Cp863" ,"Cp864" ,"Cp865",
"Cp866" ,"Cp868" ,"Cp869" ,"Cp870" ,"Cp871" ,"Cp874","Cp875",
"Cp918" ,"Cp921" ,"Cp922" ,"Cp930" ,"Cp933" ,"Cp935","Cp937","Cp939",
"Cp942" ,"Cp948" ,"Cp949" ,"Cp950" ,"Cp964" ,"Cp970",
"EUC_CN","EUC_JP","EUC_KR","EUC_TW",
"GBK",
"ISO2022CN_CNS","ISO2022JP","ISO2022KR",
"JIS0201","JIS0208","JIS0212",
"KOI8_R",
"MS874",
"MacArabic","MacCentralEurope","MacCroatian","MacCyrillic",
"MacDingbat","MacGreek","MacHebrew","MacIceland","MacRoman",
"MacRomania","MacSymbol","MacThai","MacTurkish","MacUkraine",
"SJIS",
"UTF8","UTF-16","UnicodeBig","UnicodeLittle"



P.s. жду ваших коментариев, а также вариантов, что это за "закодированое" слово.

2 комментария:

r00tGE(R) комментирует...

"привет" в UTF-8 :)
Можно без java определить, если хоть раз настраивал кодировку в линуксовой аське.
А как этот метод сделать универсальным, так что-бы работал, при неизвестной изначальной кодировке?

Анонимный комментирует...

У меня просто нет слов! Я, чорт побери, 4 битых часа активно лопатил гугл и безрезультатно пытался преобразовать параметр XMLHttpReques из UTF-8 в cp1251 для работы с ним в сервлете. В конечном итоге помог только этот метод.

Огромнейшее спасибо!