在过去糟糕的日子里,这曾经非常麻烦。每个单独的程序都必须被单独说服以保留您的位。现在虽然并非一切都很容易,但最近许多 gnu 实用程序已经学会对 LC_CTYPE=iso_8859_1
或 LC_CTYPE=iso-8859-1
做出反应。首先尝试这个,如果它没有帮助,请查看下面的提示。请注意,在 libc 的最新版本中,只有在您安装了区域设置文件(例如在 /usr/lib/locale
中)后,例程 setlocale() 才能工作。
首先,第 8 位应该在内核输入处理中幸存下来,因此请确保设置了 stty cs8 -istrip -parenb
。
A. 对于 emacs
,细节在很大程度上取决于版本。以下信息适用于 19.34 版本。将以下行放入您的 $HOME/.emacs
中。
(set-input-mode nil nil 1)
(standard-display-european t)
(require 'iso-syntax)
放入您的 $HOME/.emacs
。第一行(准确地说:最后一个 1)告诉 emacs
不要丢弃来自输入字符的第 8 位。第二行告诉 emacs
不要将非 ASCII 字符显示为八进制转义符。第三行指定 Latin-1 字符集的语法属性和大小写转换表。如果您在您的环境中有类似 LC_CTYPE=ISO-8859-1
的内容,则最后两行是多余的。(变量也可能是 LC_ALL
甚至 LANG
。该值可以是任何带有子字符串“88591”或“8859-1”或“8859_1”的内容。)这是一个好的开始。在无法显示非 ASCII ISO 8859-1 符号的终端上,命令
(load-library "iso-ascii")
将导致重音字符显示为 comme {,c}a。如果您的键盘映射不容易生成非 ASCII 字符,那么
(load-library "iso-transl")
将使双字符序列 Ctrl-X 8 成为组合字符,以便四字符序列 Ctrl-X 8 , c 生成 c-cedilla。非常不方便。命令
(iso-accents-mode)
将切换 ISO-8859-1 重音模式,在该模式下,六个字符 ', `, ", ^, ~, / 是死键,用于修改后面的符号。特殊组合:~c 给出带 cedilla 的 c,~d 给出冰岛语 eth,~t 给出冰岛语 thorn,"s 给出德语 sharp s,/a 给出带环的 a,/e 给出 a-e 连字,~< 和 ~> 给出书名号,~! 给出倒感叹号,~? 给出倒问号,'' 给出锐音符。这是重音的默认映射。变量 iso-languages
是(语言名称,重音映射)对的列表,可以使用
(iso-accents-customize LANGUAGE)
在这里,LANGUAGE 可以是 "portuguese"
、"irish"
、"french"
、"latin-2"
、"latin-1"
之一。由于 Linux 默认的组合字符是 Ctrl-.,因此在任何地方都使用它可能很方便。尝试
(load-library "iso-insert.el")
(define-key global-map [?\C-.] 8859-1-map)
后一行在 xterm
下不起作用,如果您使用 emacs -nw
,但在这种情况下,您可以将
XTerm*VT100.Translations: #override\n\
Ctrl <KeyPress> . : string("\0308")
放入您的 .Xresources
中。)B. 对于 less
,将 LESSCHARSET=latin1
放入环境中。如果您在 man
输出中看到 \255
或 <AD>
,这也是您需要的:某些版本的 less
在未被允许输出 Latin-1 时,会以这种方式渲染软连字符(八进制 0255,十六进制 0xAD)。
C. 对于 ls
,给出选项 -N
。(可能您想创建一个别名。)
D. 对于 bash
(1.13.* 版本),将
set meta-flag on
set convert-meta off
set output-meta on
放入您的 $HOME/.inputrc
中。E. 对于 tcsh
,使用
setenv LANG US_en
setenv LC_CTYPE iso_8859_1
如果您的系统上有 nls,则使用相应的例程。否则,tcsh
将假定 iso_8859_1,而不管赋予 LANG 和 LC_CTYPE 的值。请参阅 tcsh(1) 中的 NATIVE LANGUAGE SYSTEM 部分。(丹麦语 HOWTO 说:setenv LC_CTYPE ISO-8859-1; stty pass8
)F. 对于 flex
,如果它生成的解析器必须能够处理 8 位输入,则给出选项 -8
。(当然必须能够处理。)
G. 对于 elm
,将 displaycharset
设置为 ISO-8859-1
。(丹麦语 HOWTO:LANG=C
和 LC_CTYPE=ISO-8859-1
)
H. 对于使用 curses 的程序(例如 lynx
),David Sibley 报告:常规 curses 包使用高位用于反向视频模式(请参阅 /usr/include/curses.h
中定义的标志 _STANDOUT)。但是,ncurses
似乎是 8 位干净的,并且可以正确显示 iso-latin-8859-1。
I. 对于使用 groff
的程序(例如 man
),请确保使用 -Tlatin1
而不是 -Tascii
。旧版本的程序 man
也使用 col
,并且以下几点也适用。
J. 对于 col
,请确保 1) 对其进行修复以执行 setlocale(LC_CTYPE,"");
和 2) 将 LC_CTYPE=ISO-8859-1
放入环境中。
K. 对于 rlogin
,使用选项 -8
。
L. 对于 joe
,据说 metalab.unc.edu:/pub/Linux/apps/editors/joe-1.0.8-linux.tar.gz
在编辑配置文件后可以工作。其他人说:joe
:将 -asis
选项放在 /isr/lib/joerc
中的第一列。
M. 对于 LaTeX:\documentstyle[isolatin]{article}
。对于 LaTeX2e:\documentclass{article}\usepackage{isolatin}
,其中 isolatin.sty
可从 ftp.vlsivie.tuwien.ac.at/pub/8bit 获取。
在 grasp.insa-lyon.fr:/pub/faq/fr/accents
文件(法语)中包含关于 ISO-8859-1 以及如何管理 8 位字符的精彩讨论。另一个精彩的讨论(英语)可以在 rtfm.mit.edu:pub/usenet-by-group/comp.answers/internationalization/iso-8859-1-charset 中找到。
如果您需要修复一个在 8 位字符方面表现不佳的程序,需要记住的一件事是,如果您有一个有符号的 char 类型,那么字符可能是负数,并且将它们用作数组索引将会失败。通过明智地添加 (unsigned char) 强制转换,可以修复多个程序。