2016-09-08 16 views
0

У меня есть этот текстовый файл, сохраненный на моем сервере, который содержит буквы Unicode в шестнадцатеричном десятичном формате, например \u3010 и т. Д. Я хочу их преобразовать, чтобы сделать их доступными для человека, нормального читаемого текста, как «Благословенного Мессию и башни» и т.д.BASH: Преобразование Unicode Hex в строку

\u3010Vocaloid 10\u3011Blessed Messiah and the Tower of AI\u3010Originl MV\u3011 
\u3010Otomachi Una\u3011 Hate It! Hate It! Huge Ego! 
\u3010Otomachi Una\u3011Melt \u3010Cover\u3011 
\u3010GUMI\u3011 \u604b\u611b\u30c7\u30b3\u30ec\u30fc\u30c8 \u3010\u30aa\u30ea\u30b8\u30ca\u30ebMV\u3011 

Я уже пытался запустить cat FILE | hexdump -v или cat FILE | iconv -f utf16, без какого-либо успеха. Я даже пробовал cat FILE | ascii2uni -a U -q, который работал, но было несколько графических недостатков, например.

【Otomachi Una】Melt over】 

Как правильно закодировать эти символы? Я бы предпочел команды, встроенные в большинство систем unix.

ответ

1

Это те же литералы, которые признаны echo -e как символы Юникода.

$ echo -e "$(<FILE)" 
【Vocaloid 10】Blessed Messiah and the Tower of AI【Originl MV】 
【Otomachi Una】 Hate It! Hate It! Huge Ego! 
【Otomachi Una】Melt 【Cover】 
【GUMI】 恋愛デコレート 【オリジナルMV】 
+0

Я попробовал это, и это, кажется, работает, но для некоторых причина, несколько наборов символов не отображаются правильно. Я обновил вопрос, где вы можете видеть, что «【C» неправильно закодирован. Интересно, почему это происходит. –

+0

Это, скорее всего, проблема с вашим терминалом, отображающим символы; если вы подключите вывод к новому файлу, а затем отобразите * его * содержимое через 'hexdump', вы должны увидеть, что все символы присутствуют. – chepner

+0

Мой файл находится в UTF-8, он должен быть ASCII, чтобы это работало правильно. Благодаря! –

1

Одно из решений:

printf '%s' "$(<file)" 

enter image description here

где файл это имя файла, содержащего юникод текст

+1

'printf '% s'" $ ( chepner