OS X终端UTF-8问题

时间:2011-01-05 16:34:17

标签: macos vim utf-8 ssh terminal

好的,所以在经过15年的linux之后我终于得到了一台MacBook Air。在我得到它之前,我最关心的是UTF-8支持,因为无论我是从Windows还是mac-clients发送给我的文件,总是会出现编码问题,而在ubuntu上我可以确定所有输出无论什么程序都会产生完美的utf-8编码数据。

现在我的第二天(今天)与OS X一起沮丧地撕裂了我的头发。为什么呢?

当我打开Nano并输入一些像ÅÄÖ这样的瑞典字符时,它会在行尾添加空白字符(我猜这是每个字符中的另一个字节)

当我打开python并尝试使用瑞典语字符时,它根本不输出任何内容

当我通过SSH连接到Ubuntu服务器时,我无法在bash中键入åäö,但它很难在VIM中运行(仍然通过SSH)。并且在nano退格中不起作用,但是如果在终端首选项中选中“删除发送ctrl + H”框,则退格开始在nano中工作但在VIM中停止工作。

我尝试在终端首选项中取消选中所有其他编码然后UTF-8,但这似乎也不起作用。

我确信每个非美国人都必须有同样的问题,所以我应该修理它们吗?我只想要完整的UTF-8支持......:'(

13 个答案:

答案 0 :(得分:37)

对我帮助了这个: 我在终端

的本地shell上检查了语言环境
$ locale
LANG="cs_CZ.UTF-8"
LC_COLLATE="cs_CZ.UTF-8"

然后通过ssh和编辑后的文件/ etc / profile连接到我正在使用的任何远程主机 - 最后我添加了一行:

export LANG=cs_CZ.UTF-8

在下次连接后,它在bash,ls和nano中工作正常。

答案 1 :(得分:16)

不幸的是,“首选项”对话框并不总是非常有用,但通过调整,你应该能够使一切正常运行。

为了能够在终端中键入瑞典语字符,请将以下行添加到〜/ .inputrc中(很可能您必须创建此文件):

set input-meta on
set output-meta on
set convert-meta off

这应该与utf8和bashnano以及许多其他程序中的其他编码一起完成。某些程序(如tmux)也取决于locale。然后,将export LC_ALL=en_US.UTF-8添加到~/.profile文件应该会有所帮助,但请记住,一些(主要是模糊的)程序需要标准的区域设置,因此如果您在运行或编译程序时遇到问题,请尝试回到LC_ALL=C

一些可能有用的参考资料:

答案 2 :(得分:14)

转到Terminal -> Preferences -> Advanced (Tab)转到International,然后选择Unicode (UTF-8)作为Character Encoding

并勾选Set locale environment variables on startup

答案 3 :(得分:13)

以下是您在OS X Mavericks(10.9)下需要执行的操作的摘要。

总结了这一点

http://hints.macworld.com/article.php?story=20060825071728278

  1. 转到终端 - >偏好设置 - >设置 - >高级。

    国际下,确保字符编码设置为 Unicode(UTF-8)

    此外,这是关键:在仿真下,确保未选中使用Control-V 转义非ASCII输入(即不 em> set)。

    这两个设置解决了终端的问题。

  2. 确保您的区域设置设置为以.UTF-8结尾的内容。输入locale并查看LC_CTYPE行。如果它没有说en_US.UTF-8之类的内容(如果你使用非美国英语语言环境,那么点之前的内容可能会改变),那么在你的Bash .profile或{{1}中在您的主目录中,添加如下所示的行:

    .bashrc

    这将解决一般命令行程序的问题。

  3. 将以下行添加到主目录中的export LC_CTYPE=en_US.UTF-8 (如有必要,请创建它):

    .inputrc

    这使得Bash成为8位干净,所以它会传入和传出UTF-8字符,而不会弄乱它们。

  4. 请注意,您必须重新启动Bash(例如关闭并重新打开终端窗口),以使其注意您在上面的2和3中所做的所有设置。

答案 4 :(得分:9)

简短的通用答案(适合其他国家语言,甚至立陶宛语或俄语)

  • 打开终端
  • 编辑.profile in home direkctory - nano .profile
  • 添加行export LC_ALL=en_US.UTF-8
  • 按Ctrl + x和Y(退出并保存)

这为我解决了即使是小国罕见的民族性格。您可能需要关闭并打开终端以使更改生效。

此外,如果您喜欢Linux行为(使用很多Alt快捷键,如Alt +。或Alt +,在mc中),那么您应该禁用Mac风格的Option键功能: 终端 - >首选项 - >配置文件 - >键盘和复选框: Use Option as Meta key

答案 5 :(得分:5)

我的终端只是表现得很傻,而不是打印出来的åäö。我找到(并设置)此设置:enter image description here

Terminal -> Preferences... -> Profiles -> Advanced下。

似乎解决了我的问题。

答案 6 :(得分:4)

要使nano按照您的意愿工作,请尝试:

export LANG="UTF-8"

或者通过nano获取MacPorts的较新版本:

# cf. http://www.macports.org/install.php
port info nano
port variants nano
sudo port install nano +utf8 +color +no_wrap

关于ssh& UTF-8在SendEnv LANG LC_*中发出 /etc/ssh_config个评论。

请参阅:Terminal in OS X Lion: can't write åäö on remote machine

答案 7 :(得分:3)

使用nano --version检查nano是否实际上是使用UTF-8支持构建的。这是Cygwin:

nano --version
 GNU nano version 2.2.5 (compiled 21:04:20, Nov  3 2010)
 (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
 2008, 2009 Free Software Foundation, Inc.
 Email: nano@nano-editor.org    Web: http://www.nano-editor.org/
 Compiled options: --enable-color --enable-extra --enable-multibuffer
 --enable-nanorc --enable-utf8

注意最后一点。

答案 8 :(得分:1)

由于nano是终端应用。我想这更像是一个终端问题,而不是纳米问题。

我在OS X遇到了类似的问题(我无法在终端输入和查看中文字符)。

我尝试通过OS X UI调整系统设置,其实际效果是更改环境变量LANG。

所以最后我只是在〜/ .bashrc中添加一些东西来解决问题。

# I'm Chinese and I prefer English manual
export LC_COLLATE="zh_CN.UTF-8"
export LC_CTYPE="zh_CN.UTF-8"
export LC_MESSAGES="en_US.UTF-8"
export LC_MONETARY="zh_CN.UTF-8"
export LC_NUMERIC="zh_CN.UTF-8"
export LC_TIME="zh_CN.UTF-8"

顺便说一句,不要设置LC_ALL,它将覆盖所有其他LC_ *设置。

答案 9 :(得分:0)

就我而言,只使用uxterm命令代替xterm解决了问题。它可以通过安装Apple提供的XQuartz软件包在/opt/X11/bin/uxterm中使用。

答案 10 :(得分:0)

尝试

  1. 已安装与Powerline兼容的字体https://github.com/powerline/fonts
  2. .zshrc.bashrc中设置这些ENV变量:
LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL="en_US.UTF-8"

答案 11 :(得分:0)

只需在远程服务器上添加一个文件

$ sudo nano /etc/environment

LANG=en_US.utf-8
LC_ALL=en_US.utf-8

PS:Top answer 建议更改远程服务器上的 /etc/profile 文件,它可以工作,但此文件经常被系统覆盖,并且不会长时间起作用。

/etc/profile 文件包含免责声明:

<块引用>

除非您知道自己在做什么,否则更改此文件不是一个好主意。最好在 /etc/profile.d/ 中创建 custom.sh shell 脚本以对您的环境进行自定义更改,因为这将防止在将来的更新中进行合并。

答案 12 :(得分:-6)

...或者只是单独保留shell并使用TextWrangler,它也允许您选择编码,并可以通过sftp直接打开/保存到您的Ubuntu框。