Как правильно преобразовать файл в кодировку UTF -16LE, чтобы в файле не появлялись странные символы?

Попробуйте

ping -c 1 www.google.com | awk 'NR==2{print strftime("[%T]",systime()),substr($8,6),"ms"}'

Берет текущее время с помощью systime()и форматирует его в представление %T (чч :мм :сс )с помощью strftime. Затем печатает соответствующую часть поля 8, чтобы убрать ерунду time=.

Пример

ping -c 1 www.google.com | awk 'NR==2{print strftime("[%T]",systime()),substr($8,6),"ms"}'
[21:32:05] 1.03 ms
1
08.09.2020, 18:14
1 ответ

Ваш vimне распознал кодировку и отображает 16 -битных символов как 8 -битных символов. Маркеры ^@представляют 8 бит -более высокого порядка, которые для обычных латинских символов будут иметь нулевое значение.

Вы можете ввести это после прочтения файла, чтобы принудительно распознать UTF -16LE

:e ++enc=utf-16le

(Кредит:StackOverflow)

Вроде бы это тоже сработает, но идеально ли это, мне далеко не ясно

vim -c 'e ++enc=utf-16le' dictionary.dsl

Наконец, из вашего комментария кажется, что спецификация была бы вполне приемлемой. Вы не можете использоватьiconvдля добавления спецификации, но можете добавить ее самостоятельно

(
    printf "%s" $'\xFF\xFE'
    iconv -f iso-8859-1 -t utf-16le dictionary.dsl
) > dictionary-utf16le.dsl

Подтвердить с помощью

file dictionary-utf16le.dsl
dictionary-utf16le.dsl: Little-endian UTF-16 Unicode text
4
18.03.2021, 23:06

Теги

Похожие вопросы