Author Topic: Задачка по html  (Read 5893 times)

Online Euskaldun

  • Администратор
  • Трижды герой
  • *****
  • Posts: 28991
  • Карма: +3990/-330
    • View Profile
Задачка по html
« on: 13 April 2020, 21:55:58 »
  • 0
  • 0
Есть txt файл, в 1,5М в 143 тыс строчек с японскими иерогами, отсортированными по частоте использования в японских газетах. В файле используется старая кодировка, поэтому иероги не просто "плохо" отражаются, с ??? и т.д., там просто не те иероги отражаются  :o У этого явления даже есть собственное название: модзибаке. Парсер неправильно комбинирует байты кодировки и в результате иероги получаются, но не те, которые нужны.

Единственная причина, почему я догадался, что файл левый, это по тому, что если ему верить, то самое частое знаменательное слово в японских газетах - "плакать"  :lol: Если это можно было бы списать на культурные различия, то второе по частоте слово явно не "крабовая клешня". :D

Мне удалось "починить" файл, открыв его в хроме и насильно изменив кодировку с UTF-8 на EUC-JP. Однако сохранить излеченный файл не удалось: так как он изначально был txt, то изменённая кодировка нигде не сохраняется. Я вставил код html с кодировкой в сам файл и с помощью Notepad сохранил его в формате html. Почти всё хорошо, кроме одной детали - все строчки теперь слиплись в сплошной текст, так как <br> там естественно не появились. Я не использовал Word и т.д. так файл из-за его тяжести процессинга завешивает программы. Даже Notepad страшно тормозит, если что-то вставлять в файл.

Вопрос: Как сделать файл удобочитаемым опять? а) вставить <br> в каждую строчку html файла, автоматически? б) навязать кодировку txt файлу? в) какой-то другой вариант, который мне не пришёл в голову?

Идеи?  ??? :-\
 

Offline Upliner

  • Администратор
  • Герой
  • *****
  • Posts: 4945
  • Карма: +434/-18
  • Gender: Male
  • Кис-кис-кис!
    • View Profile
    • лифчег
Re: Задачка по html
« Reply #1 on: 13 April 2020, 22:18:15 »
  • 0
  • 0
В линухе вариант "б" решается без проблем одной строчкой: iconv -f EUC-JP oldfile.txt > newfile.txt
« Last Edit: 13 April 2020, 22:20:51 by Upliner »
Дві найголовніші помилки українського народу -- зек і зєк.

Offline Upliner

  • Администратор
  • Герой
  • *****
  • Posts: 4945
  • Карма: +434/-18
  • Gender: Male
  • Кис-кис-кис!
    • View Profile
    • лифчег
Re: Задачка по html
« Reply #2 on: 13 April 2020, 22:20:41 »
  • 0
  • 0
Насчёт варианта "а": вроде как редакторы вроде Notepad++ умеют делать автозамену по регулярным выражениям. Тогда делаете просто замену $ на <br /> и оно вставляется в конце каждой строчки.
Дві найголовніші помилки українського народу -- зек і зєк.

Offline Upliner

  • Администратор
  • Герой
  • *****
  • Posts: 4945
  • Карма: +434/-18
  • Gender: Male
  • Кис-кис-кис!
    • View Profile
    • лифчег
Re: Задачка по html
« Reply #3 on: 13 April 2020, 22:49:42 »
  • 0
  • 0
У этого явления даже есть собственное название: модзибаке.
Русский вариант называется "крякозябры".
Дві найголовніші помилки українського народу -- зек і зєк.

Online Euskaldun

  • Администратор
  • Трижды герой
  • *****
  • Posts: 28991
  • Карма: +3990/-330
    • View Profile
Re: Задачка по html
« Reply #4 on: 13 April 2020, 23:27:18 »
  • 0
  • 0
Русский вариант называется "крякозябры".
они в русском "кракозябры", в японском они обычные символы, только неправильные. Это как в русском тексте заменить буквы кириллицы кириллицей, но случайным образом. В остальном текст абсолютно нормальный, даже знаки пунктуации правильно расставлены  :dunno:

Online Euskaldun

  • Администратор
  • Трижды герой
  • *****
  • Posts: 28991
  • Карма: +3990/-330
    • View Profile
Re: Задачка по html
« Reply #5 on: 13 April 2020, 23:29:18 »
  • 0
  • 0
Насчёт варианта "а": вроде как редакторы вроде Notepad++ умеют делать автозамену по регулярным выражениям. Тогда делаете просто замену $ на <br /> и оно вставляется в конце каждой строчки.
так ведь нет повторяющего выражения  :dunno: В каждой строчке абсолютно новый иерог и против него число, постоянно уменшающееся :-\

Online Euskaldun

  • Администратор
  • Трижды герой
  • *****
  • Posts: 28991
  • Карма: +3990/-330
    • View Profile
Re: Задачка по html
« Reply #6 on: 13 April 2020, 23:30:06 »
  • 0
  • 0
В линухе вариант "б" решается без проблем одной строчкой: iconv -f EUC-JP oldfile.txt > newfile.txt
а для виндоуса есть подобный вариант?

Offline Upliner

  • Администратор
  • Герой
  • *****
  • Posts: 4945
  • Карма: +434/-18
  • Gender: Male
  • Кис-кис-кис!
    • View Profile
    • лифчег
Re: Задачка по html
« Reply #7 on: 13 April 2020, 23:31:14 »
  • 0
  • 0
Это как в русском тексте заменить буквы кириллицы кириллицей, но случайным образом.
При интерпретации КОИ-8 как Win1251 кириллица оставалась кириллицей.
Дві найголовніші помилки українського народу -- зек і зєк.

Offline Upliner

  • Администратор
  • Герой
  • *****
  • Posts: 4945
  • Карма: +434/-18
  • Gender: Male
  • Кис-кис-кис!
    • View Profile
    • лифчег
Re: Задачка по html
« Reply #8 on: 13 April 2020, 23:36:01 »
  • 0
  • 0
а для виндоуса есть подобный вариант?
Вроде как в том же Notepad++ есть функция преобразования файла в UTF-8
Дві найголовніші помилки українського народу -- зек і зєк.

Offline Upliner

  • Администратор
  • Герой
  • *****
  • Posts: 4945
  • Карма: +434/-18
  • Gender: Male
  • Кис-кис-кис!
    • View Profile
    • лифчег
Re: Задачка по html
« Reply #9 on: 13 April 2020, 23:37:16 »
  • 0
  • 0
так ведь нет повторяющего выражения  :dunno: В каждой строчке абсолютно новый иерог и против него число, постоянно уменшающееся :-\
Не нужны повторяющиеся выражения, в regexp $ -- это специальный символ, обозначающий конец строки. Таким образом можно что угодно вставлять в начало или в конец строки. Не помню точно, поддерживается ли это в Notepad++, но он настолько навороченный, что удивлюсь, если там этой фичи нет.
Дві найголовніші помилки українського народу -- зек і зєк.

Offline Upliner

  • Администратор
  • Герой
  • *****
  • Posts: 4945
  • Карма: +434/-18
  • Gender: Male
  • Кис-кис-кис!
    • View Profile
    • лифчег
Re: Задачка по html
« Reply #10 on: 13 April 2020, 23:41:57 »
  • 0
  • 0
Вроде как в том же Notepad++ есть функция преобразования файла в UTF-8
Посмотрел -- вроде как из японских кодировок он поддерживает только Shift-JIS. Если это не то, то с этим способом облом, нужно или другую прогу искать или ещё чего...
Дві найголовніші помилки українського народу -- зек і зєк.

Offline Upliner

  • Администратор
  • Герой
  • *****
  • Posts: 4945
  • Карма: +434/-18
  • Gender: Male
  • Кис-кис-кис!
    • View Profile
    • лифчег
Re: Задачка по html
« Reply #11 on: 13 April 2020, 23:49:54 »
  • 0
  • 0
Не помню точно, поддерживается ли это в Notepad++, но он настолько навороченный, что удивлюсь, если там этой фичи нет.
Проверил, да -- этот способ работает. Только вместо "test" написать "<br/>"
Дві найголовніші помилки українського народу -- зек і зєк.

Offline Upliner

  • Администратор
  • Герой
  • *****
  • Posts: 4945
  • Карма: +434/-18
  • Gender: Male
  • Кис-кис-кис!
    • View Profile
    • лифчег
Re: Задачка по html
« Reply #12 on: 13 April 2020, 23:55:27 »
  • 0
  • 0
Посмотрел -- вроде как из японских кодировок он поддерживает только Shift-JIS. Если это не то, то с этим способом облом, нужно или другую прогу искать или ещё чего...
Вот, вроде нашлась сборка, которая поддерживает EUC-JP:
https://www.off-soft.net/en/apps/notepadpp/notepadpp-japack1.html
Дві найголовніші помилки українського народу -- зек і зєк.

Online Euskaldun

  • Администратор
  • Трижды герой
  • *****
  • Posts: 28991
  • Карма: +3990/-330
    • View Profile
Re: Задачка по html
« Reply #13 on: 14 April 2020, 00:02:24 »
  • 0
  • 0
Посмотрел -- вроде как из японских кодировок он поддерживает только Shift-JIS. Если это не то, то с этим способом облом, нужно или другую прогу искать или ещё чего...
Shift-JIS не то, этот файл из 1998 года, поэтому в нём кодировка ещё более допотопная

Online Euskaldun

  • Администратор
  • Трижды герой
  • *****
  • Posts: 28991
  • Карма: +3990/-330
    • View Profile
Re: Задачка по html
« Reply #14 on: 14 April 2020, 00:10:15 »
  • 0
  • 0
Проверил, да -- этот способ работает. Только вместо "test" написать "<br/>"
большое спасибо  :yes: Сделал всё по инструкции, пока висим  :lol: