Запись специальных символов в буфер обмена с помощью командной строки

Я пытаюсь записать строку あいうえおв буфер обмена с помощью инструмента командной строки pbcopy , подобного этому

echo あいうえお | pbcopy

Но то, что я получаю в своем буфере обмена, совершенно другое: „ÅÇ„ÅÑ„ÅÜ„Åà„Åä.

Я предположил, что это как-то связано с кодировкой, но в документации говорится, что кодировка основана на переменной среды LANG, а у меня установлено значение en_EN.UTF-8.

Ответы (2)

Я думаю LANG=en_EN.UTF-8проблема в тебе.

Когда я выполняю эту команду

printf あいうえお | LANG=en_EN.UTF-8 pbcopy

и вставьте в новый документ TextEdit , который я получаю „ÅÇ„ÅÑ„ÅÜ„Åà„Åä(кстати, это то, что вы получите, если возьмете кодировку UTF-8 исходного текста и декодируете ее как MacRoman; вы сможете проверить это, выполнив ) printf あいうえお | iconv -f macroman.

Когда я выполняю эту команду

printf あいうえお | LANG=en_US.UTF-8 pbcopy

и вставьте в новый документ TextEdit , который я получаю あいうえお, как и следовало ожидать.


Я почти уверен, что en_EN.UTF-8это недопустимая локаль (поэтому pbcopyпо умолчанию используется MacRoman). Может быть, вы имели в виду использовать en_US.UTF-8(т.е. USне EN)? Вы можете перечислить допустимые локали, запустив locale -a. Если вас интересуют только английские локали UTF-8, вы можете отфильтровать список следующим образом:

locale -a | grep '^en_.*\.UTF-8$'
Что ж, это сработало. Я не знаю, почему мой LANG был en_EN вместо en_US. Даже не подозревал, что это может быть проблемой.

Скорее всего, это ваш терминал. Введите команду localeи посмотрите, что там написано. Если в нем не указана какая-то японская кодировка, возможно, так оно и есть. Кроме того, попробуйте выбрать «Unicode (UTF-8)» в качестве кодировки символов в меню «Настройки...», «Настройки», «Дополнительно», «Международные». Также поиграйтесь с Preferences/Encodings, включив японские кодировки (это японские? idk! LOL).

Также не забудьте установить LANGUAGE="en_US.UTF-8"в своем .bash_profile, если он не отображается при использовании localeкоманды.