Вы здесь

Как такую строку \208\181\208\180\208\181 вернуть обратно в русский (РЕШЕНО! - костыль с sed-ом и китайским кодом) ?

Уже сколько раз сталкивался с этой проблемой.

Вот был у меня текст в кодировке UTF-8 и после открытия в какой-нибудь программе превратился в такую строку \208\181\208\180\208\181 и так далее и так далее, каждая цифра имеет свой код из цифр... 

При дальнейшей работе с таким текстом это доставляет большие неудобства, ниже решение.

Правда только для линукса и относительно не идеальное. Ниже приведён код:

Преобразования файла при помощи Bash и редактора sed:
cat plohoy_fayl.txt |sed 's/\\208\\177/б/g'|sed 's/\\208//g'|sed 's/\\209//g'|sed 's/\\176/а/g'|sed 's/\\178/в/g'|sed 's/\\179/г/g'|sed 's/\\180/д/g'|sed 's/\\181/е/g'|sed 's/\\145/ё/g'|sed 's/\\183/з/g'|sed 's/\\182/ж/g'|sed 's/\\184/и/g'|sed 's/\\185/й/g'|sed 's/\\186/к/g'|sed 's/\\187/л/g'|sed 's/\\188/м/g'|sed 's/\\189/н/g'|sed 's/\\190/о/g'|sed 's/\\191/п/g'|sed 's/\\128/р/g'|sed 's/\\129/с/g'|sed 's/\\130/т/g'|sed 's/\\131/у/g'|sed 's/\\132/ф/g'|sed 's/\\133/х/g'|sed 's/\\134/ц/g'|sed 's/\\135/ч/g'|sed 's/\\136/ш/g'|sed 's/\\137/щ/g'|sed 's/\\138/ъ/g'|sed 's/\\139/ы/g'|sed 's/\\140/ь/g'|sed 's/\\141/э/g'|sed 's/\\142/ю/g'|sed 's/\\143/я/g'|sed 's/\\144/А/g'|sed 's/\\145/Б/g'|sed 's/\\146/В/g'|sed 's/\\147/Г/g'|sed 's/\\148/Д/g'|sed 's/\\149/Е/g'|sed 's/\\129/Ё/g'|sed 's/\\151/З/g'|sed 's/\\150/Ж/g'|sed 's\\152/И/g'|sed 's/\\153/Й/g'|sed 's/\\154/К/g'|sed 's/\\155/Л/g'|sed 's/\\156/М/g'|sed 's/\\157/Н/g'|sed 's/\\158/О/g'|sed 's/\\159/П/g'|sed 's/\\160/Р/g'|sed 's/\\161/С/g'|sed 's/\\162/Т/g'|sed 's/\\163/У/g'|sed 's/\\164/Ф/g'|sed 's/\\165/Х/g'|sed 's/\\166/Ц/g'|sed 's/\\167/Ч/g'|sed 's/\\168/Ш/g'|sed 's/\\169/Щ/g'|sed 's/\\170/Ъ/g'|sed 's/\\171/Ы/g'|sed 's/\\172/Ь/g'|sed 's/\\173/Э/g'|sed 's/\\174/Ю/g'|sed 's/\\175/Я/g'> new_file.txt 


Комментарий для тех, кто слабо разбирается:
cat - выводит содержимое файла plohoy_fayl.txt в консоль.
| - знак конвейера, означает, что вывод от предыдущей команды(у нас это cat), будет передан следующей команде (у нас это будет редактор sed)
sed - потоковый редактор sed
's/\\177/б/g' - выражение для sed, где ' ' - (апосторофы)открывают и закрывают выражение. s/ - означает что дальше следует что-то, что нужно заменить чем-то. В нашем случае это \177 заменить на б, а буква g означает, что сделать это надо везде. Обращаю внимание, на то, что перед 177 идёт \\ - два слэша, это нужно, чтобы программа поняла, что это не служебный символ, а символ заменяемого. (один \ используется в синтаксисе команд)

Между делом нашёл, как это делается в PHP:
Не моё решение, как раскодировать UTF-8 строку в php: (http://wm-help.net :PHP. Как раскодировать UTF-8 строку в php)

function u8($win,$h,$t) { global $w8; $w8[chr($h).chr($t)] = $win; } $c1 = chr(208); $c2 = chr(209); u8("й",208,185); u8("ц",209,134); u8("у",209,131); u8("к",208,186); u8("е",208,181); u8("н",208,189); u8("г",208,179); u8("ш",209,136); u8("щ",209,137); u8("з",208,183); u8("х",209,133); u8("ъ",209,138); u8("ф",209,132); u8("ы",209,139); u8("в",208,178); u8("а",208,176); u8("п",208,191); u8("р",209,128); u8("о",208,190); u8("л",208,187); u8("д",208,180); u8("ж",208,182); u8("э",209,141); u8("я",209,143); u8("ч",209,135); u8("с",209,129); u8("м",208,188); u8("и",208,184); u8("т",209,130); u8("ь",209,140); u8("б",208,177); u8("ю",209,142); u8("Й",208,153); u8("Ц",208,166); u8("У",208,163); u8("К",208,154); u8("Е",208,149); u8("Н",208,157); u8("Г",208,147); u8("Ш",208,168); u8("Щ",208,169); u8("З",208,151); u8("Х",208,165); u8("Ъ",208,170); u8("Ф",208,164); u8("Ы",208,171); u8("В",208,146); u8("А",208,144); u8("П",208,159); u8("Р",208,160); u8("О",208,158); u8("Л",208,155); u8("Д",208,148); u8("Ж",208,150); u8("Э",208,173); u8("Я",208,175); u8("Ч",208,167); u8("С",208,161); u8("М",208,156); u8("И",208,152); u8("Т",208,162); u8("Ь",208,172); u8("Б",208,145); u8("Ю",208,174); u8("ё",209,145); u8("Ё",208,129); function utf2win ($text) { global $c1,$c2,$w8; $u = false; $temp = ""; for($i=0,$len=strlen($text); $i<$len; $i++) { $c = substr($text,$i,1); if ($u) { $c = $w8[$lc.$c]; $temp .= isset($c)?$c:"?"; $u = false; } else if ($c==$c1 || $c==$c2) { $u = true; $lc = $c; } else $temp .= $c; } return $temp; }

Добавить комментарий

Редактор TinyMCE

  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <p> <br> <img> <hr> <blockquote> <iframe>
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.

Чистый текст

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
CAPTCHA
то тест на то, человек вы или нет. К сожалению, он необходим для защиты от спама. Если вы зарегистрируетесь, то вводить это больше не придётся.
Image CAPTCHA
Enter the characters shown in the image.