C 关于语言环境和编码的困惑

C 关于语言环境和编码的困惑,c,linux,ubuntu,C,Linux,Ubuntu,下面是我的语言环境设置 LANG=en_US.UTF-8 LC_CTYPE=zh_CN.UTF-8 LC_NUMERIC=en_US.UTF-8 LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 LC_PAPER=en_US.UTF-8 LC_NAME=en_US.UTF-8 LC_ADDRESS=en_US.UTF-8 LC_TELEPHONE=en_US.UTF

下面是我的语言环境设置

LANG=en_US.UTF-8
LC_CTYPE=zh_CN.UTF-8
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_COLLATE=en_US.UTF-8
LC_MONETARY=en_US.UTF-8
LC_MESSAGES=en_US.UTF-8
LC_PAPER=en_US.UTF-8
LC_NAME=en_US.UTF-8
LC_ADDRESS=en_US.UTF-8
LC_TELEPHONE=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
LC_IDENTIFICATION=en_US.UTF-8
LC_ALL=
如果我将LC_CTYPE更改为en_US.UTF-8,则无法在终端或其他应用程序中输入汉字。为什么?前缀:en_US或zh_CN在LC_类型中的作用是什么


如果我想输入中文单词,那么我设置LC_CTYPE=zh_CN;如果我想输入另一种语言(假设它是X)单词,那么我设置LC_CTYPE=X。但是如果我想同时输入中文和X,那么我应该怎么做

LC_CTYPE
适用于字符的分类和转换,以及多字节和宽字符


zh
是中文的ISO代码
zh_CN
是zh的一个子类型,代表“简体中文”。

请注意,您可以为每个bash会话导出语言环境,因此如果您在同一脚本中设置LANG etc并启动X会话,则整个X会话将接受此语言。 例如,下面的脚本启动德语的VNC会话,它独立于系统语言。您可以在此处为所需的输入布局添加所需的环境变量,并为每个X会话获得所需的结果

#!/bin/bash
export LANG=de_DE.UTF-8
export LANGUAGE=de_DE:de
vnc4server -depth 16 -geometry 1024x768 :1
vncconfig -iconic -nowin -display :1 &

我仍然不知道为什么我不能输入汉字,如果我将LC_CTYPE改为en_US.UTF-8,因为在en_US中你只有一个字节的字符。对于中文字形,您需要多字节字符