无法在终端上显示以 ISO-8859-9 编码的文件

无法在终端上显示以 ISO-8859-9 编码的文件

简而言之:如何将文件显示到终端不是以 UTF-8 编码吗?

目前,我有一个用 ISO-8859-9 编码的测试文件,包含以下 12 个字符:

ğüşıöçĞÜŞİÖÇ

该文件的十六进制内容如下:

\F0\FC\FE\FD\F6\E7\D0\DC\DE\DD\D6\C7

当我尝试将此文件显示到终端时,我得到:

������������

我猜这是因为我当前的语言环境定义如下:

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

但是,我在系统中安装了土耳其语区域设置:

$ locale -a
C
C.UTF-8
en_GB
en_GB.iso88591
en_GB.iso885915
en_GB.utf8
en_US
en_US.iso88591
en_US.iso885915
en_US.utf8
POSIX
tr_TR
tr_TR.iso88599
tr_TR.utf8
turkish

因此,我想使用以下命令暂时更改显示语言:

$ export LC_ALL=tr_TR.iso88599
$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="tr_TR.iso88599"
LC_NUMERIC="tr_TR.iso88599"
LC_TIME="tr_TR.iso88599"
LC_COLLATE="tr_TR.iso88599"
LC_MONETARY="tr_TR.iso88599"
LC_MESSAGES="tr_TR.iso88599"
LC_PAPER="tr_TR.iso88599"
LC_NAME="tr_TR.iso88599"
LC_ADDRESS="tr_TR.iso88599"
LC_TELEPHONE="tr_TR.iso88599"
LC_MEASUREMENT="tr_TR.iso88599"
LC_IDENTIFICATION="tr_TR.iso88599"
LC_ALL=tr_TR.iso88599
$ cat a.txt
������������

但我仍然心存问号。

答案1

您可以使用该iconv实用程序(注意:它不会就地转换文件;除非您将其重定向到其他地方,否则转换后的输出将显示在终端中)。

前任。

$ file file.ISO-8859-9 
file.ISO-8859-9: ISO-8859 text

$ cat file.ISO-8859-9 
������������

$ iconv -f ISO-8859-9 -t utf-8//translit file.ISO-8859-9 
ğüşıöçĞÜŞİÖÇ

相关内容