meld показує вихід у нечитабельному алфавіті (японський / китайський?)


15

Я використовую meld для візуалізації різниці між двома файлами. meld показує різний вихід у ... щось на зразок японського чи китайського?

Будь-яка ідея, що може статися? Проблема з мовою? Що дивно, що при використанні diffабо colordiffв терміналі вони працюють ідеально!

Спасибі!

Meld показує нечитабельний вихід


Я також щойно це зрозумів, з git meld. Як не дивно, впливає лише один з файлів LOCAL / BASE / REMOTE.
Ziv

Не знайомий з meld, але я б запропонував спробувати запустити його LC_ALL=C meldз командного рядка і побачити, чи проблема не зникає.
Сергій Колодяжний

Мій випадок був на насправді кодування Windows -1252 і вирішити , як тут -> stackoverflow.com/questions/38919384 / ...
eri0o

Відповіді:


19

Тут же проблема: кодування файлів виявлено неправильно.

У моєму випадку це пов'язано з налаштуваннями «детектувати-кодування» meld.

Перевірте:

$ gsettings get org.gnome.meld detect-encodings
['utf8']

Виявлено лише utf8.

Щоб вирішити цю проблему, додайте 'latin1'або кодуйте ваш файл:

$ gsettings set org.gnome.meld detect-encodings "['utf8','latin1']"

2

Коротке продовження до останньої відповіді:

Мені довелося додати лапки до [] частини:

gsettings set org.gnome.meld detect-encodings "['utf8','latin1']"

виконавши його в терміналі в Ubuntu 16.04


3
Краще запропонувати редагування допису, а не відповідь на невелику корекцію :)
Zanna

1
він не може коментувати, занадто мало балів, правда? :(
Сила Водолія

1

Я впевнений, що це питання кодування. Можливо, ваш термінал знаходиться в UTF-8, а файл - ISO. Це нова проблема вже в 16.04, я думаю, що це може статися і в 15.04, але можу підтвердити, що це не в 12.04.

Спробуйте перевірити свій термінал, де ви працюєте meld, набравши "locale". і ви повинні отримати щось подібне:

$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

Потім введіть "файл" для кожного з ваших файлів і переконайтеся, що вони відповідають вашому терміналу.

Зі сторони, у мене виник ряд проблем кодування між UTF-8 та ISO, які насправді ніколи не повинні відбуватися в 16.04.

Що для мене працювало, це запуск iconv на кожному файлі:

iconv -f ISO-8859-15 -t UTF-8 file_1.txt >file_1.tmp;
iconv -f ISO-8859-15 -t UTF-8 file_2.txt >file2.tmp;
mv file_1.tmp file_1.txt;
mv file_2.tmp file_2.txt;
meld file_1 file_2

1
Спасибі за вашу допомогу! fileКоманда не дуже інформативно. (просто каже ASCII). Я намагався використовувати fromdosдля конвертації, але все одно отримую той самий вихід ... Чи повинен я спробувати іншу команду? Спасибі!
Матифу

Я використовував iconv у кожному файлі для перетворення з ISO в utf-8 і все магічно працювало. Як це не дивно, тому що немає жодних ознак, які мали б змінити між собою.
поганець

Я додам команду до своєї відповіді
гадник
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.