我刚刚意识到我的系统上有一个文件;它通常列出:
$ ls -la T?S?ER.txt
-rw-r--r-- 1 user user 8 2013-04-11 18:07 T?S?ER.txt
$ cat T?S?ER.txt
testing
Run Code Online (Sandbox Code Playgroud)
...然而,它使一个软件崩溃,并出现与 UTF-8/Unicode 相关的错误。我真的很困惑,因为我不知道为什么这样的文件有问题;最后我记得检查lswith的输出hexdump:
$ ls T?S?ER.txt
T?S?ER.txt
$ ls T?S?ER.txt | hexdump -C
00000000 54 ce 95 53 d0 a2 45 52 2e 74 78 74 0a |T..S..ER.txt.|
0000000d
Run Code Online (Sandbox Code Playgroud)
...嗯,显然有一些字节之间/而不是一些字母,所以我猜这是一个 Unicode 编码问题。我可以尝试回显字节以查看打印的内容:
$ echo -e "\x54\xCE\x95\x53\xD0\xA2\x45\x52\x2E\x74\x78\x74"
T?S?ER.txt
Run Code Online (Sandbox Code Playgroud)
...但我仍然无法分辨这些是哪些 - 如果有 - Unicode 字符。
那么是否有一个命令行工具,我可以在终端上检查一个字符串,并获取有关它的字符的 Unicode 信息?
有没有可以帮我找出文本文件的字符集,然后将其转换为 utf-8 的工具(mac 或在线)?
我花了很多时间ssh在各种机器上进行研究,所有机器都不同(有些是嵌入式的,有些运行 Linux,有些运行 BSD,等等)。然而,在我自己的本地机器上,我使用 OS X,它当然有一个基于 BSD 的用户空间。我在这些机器上的语言环境设置为 en_GB.UTF-8,这是可用选项之一:
% echo `sw_vers`
ProductName: Mac OS X ProductVersion: 10.8.2 BuildVersion: 12C60
% locale -a | grep -i 'en_gb.utf'
en_GB.UTF-8
Run Code Online (Sandbox Code Playgroud)
我使用的几个更强大的 Linux 系统似乎有一个等效的选项,但我注意到在 Linux 上名称略有不同:
% lsb_release -d
Description: Debian GNU/Linux 6.0.3 (squeeze)
% locale -a | grep -i 'en_gb.utf'
en_GB.utf8
Run Code Online (Sandbox Code Playgroud)
这让我想知道:当我ssh从我的 Mac 进入一台 Linux 机器时,它LC_*使用“UTF-8”后缀转发我的所有变量,那台 Linux 机器甚至理解它的要求吗?或者它只是回退到其他地方?
编辑:这是我所指的一个例子:
% ssh -v odin
...
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending env LC_ALL = …Run Code Online (Sandbox Code Playgroud) 考虑一下我在 PHP 博客中找到的这行假定的代码,注意引号:
throw new Exception(“That's not a server name!”);
Run Code Online (Sandbox Code Playgroud)
这些引号是正确的双引号(Unicode 代码点:U+201D;UTF-8 十六进制编码值:)0xE2 0x80 0x9D。ga在 VIM 中按在状态栏中显示以下内容:
<”> 8221, Hex 201d, Octal 20035
Run Code Online (Sandbox Code Playgroud)
?
为什么显示的是 Unicode 代码点而不是 UTF-8 代码值?
考虑到文件存储为 UTF-8 并且它是将字节转换为字形的终端,我希望 VIM 显示文件的原始值(UTF-8 代码值),而不是将其转换为 Unicode 代码点.
在 Windows 7 上,dir 或 tree 无法显示 unicode 字符,即使以 cmd /U 启动 cmd
所以我会按下 Window Key + R运行一些东西,然后输入cmd /U内容,以便内容可以处理 Unicode。
然后使用dir或tree /F,Unicode 中的内容不会显示为 Unicode。(在窗口资源管理器(文件管理器)中,将显示 Unicode)
有办法处理吗?要获取 Unicode 字符来测试您的文件名,您可以访问
http://news.google.com/news?edchanged=1&ned=tw
并且您将能够在那里获得许多 Unicode 字符(UTF-8)
我的 Ubuntu Lucid 系统上需要一个轻量级的 GUI 文本编辑器,它可以让我指定一个 Unicode 代码点(例如U+1234),并将该字符插入到 UTF-8 文本文档中。我知道这gedit做不到(即使使用Character Map插件也不行)。
我对涉及任何类型emacs或的解决方案不感兴趣vi。我也对在终端中运行的文本编辑器不感兴趣(例如joe,它具有此功能)。我需要最简单、最小和最快的 Linux 纯文本编辑器,它让我输入几个字母,通过他们的代码插入几个字符,输入更多字母,然后将.txt文件保存为 UTF-8 编码。
我有一些文件名,其中包含一些 Unicode 字符。Mac OS X 上的所有文件名都是 UTF8 编码的。也$LANG设置为en_US.UTF-8.
但是,它似乎svn有一些问题:
az@ip212 1054 (Integration) %ls
Abbildungen Verbesserungsvorschläge_Applets.odt
AllgemeineAnmerkungen.rtf Verbesserungsvorschläge_Applets.rtf
Geogebra Vorlagen
Texte
az@ip212 1055 (Integration) %svn ls
Abbildungen/
AllgemeineAnmerkungen.rtf
Geogebra/
Texte/
Verbesserungsvorschläge_Applets.rtf
Verbesserungsvorschläge_Applets.odt
Vorlagen/
az@ip212 1056 (Integration) %svn del Verb*.odt
svn: Use --force to override this restriction
svn: 'Verbesserungsvorschläge_Applets.odt' is not under version control
az@ip212 1057 (Integration) %svn status
? Verbesserungsvorschläge_Applets.odt
! Verbesserungsvorschläge_Applets.odt
az@ip212 1058 (Integration) %
Run Code Online (Sandbox Code Playgroud)
如您所见,svn del无法识别文件名。甚至svn status对此感到困惑。
我怎样才能解决这个问题?我也试过LC_CTYPE=$LANG …
我可以设置 KiTTY 来发送F7新闻而不是在我按下时弹出打印对话框F7吗?
我大量使用Midnight Commander及其编辑器,它们都依赖于F7(创建目录和搜索文本)并且我从未真正从终端打印。
在 Windows 上,我需要在包含 UTF-8 BOM(字节顺序标记)的目录中查找所有文件。哪个工具可以做到这一点以及如何做到这一点?
它可以是 PowerShell 脚本、某些文本编辑器的高级搜索功能或其他任何东西。