Как заменить кодировки в спец символы
Есть текстовый файл test.txt с кодировкой:
!
€
✖
ы
и тд
Как перевести эти кодировки в соответствующие им символы: ! € ✖ ы и тд
Пробовал вручную командой sed -i -e 's/ы/ы/g' test.txt Всё работает, но таких символов больше тысячи. Такая работа займет больше дня.
Ответы (2 шт):
Автор решения: gil9red
→ Ссылка
Через python3 это можно в несколько строк сделать.
Алгоритм:
- Использование одной кодировка, пусть будет
utf-8 - Открыть файл на считывание (
f_in) - Открыть другой файл на запись (
f_out). Можно и в тот же файл сделать запись, но, думаю, лучше в новый, чтобы не делать потом бэкапы - Через встроенную библиотеку
htmlвыполняется замена: https://docs.python.org/3/library/html.html#html.unescape
Пример:
import html
with open('test.txt', encoding='utf-8') as f_in, \
open('new_test.txt', 'w', encoding='utf-8') as f_out:
text = f_in.read()
f_out.write(html.unescape(text))
test.txt:
!
Hello
€
Мир
✖
!
ы
new_test.txt:
!
Hello
€
Мир
✖
!
ы
Автор решения: Drakonoved
→ Ссылка
В Java есть специальная библиотека для работы с текстом:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.8</version>
</dependency>
Пример использования:
public static void main(String[] args) throws Exception {
soutUnescaped("!");
soutUnescaped("€");
soutUnescaped("€");
soutUnescaped("ы");
// !
// €
// €
// ы
}
private static void soutUnescaped(String escapedString) {
System.out.println(StringEscapeUtils.unescapeHtml4(escapedString));
}