我必须处理一个包含许多不可见控制字符的文件,例如“从右到左”或“零宽度非连接符”、与正常空间不同的空格等等,我在处理这个问题时遇到了麻烦。
现在,我想以某种方式逐个字母地查看给定文件中的所有字母(我想说“从左到右”,但不幸的是我正在处理从右到左的语言),作为 unicode 代码点,仅使用基本的 bash 工具(如vi, less, cat...)。有可能吗?
我知道我可以通过 以十六进制显示文件hexdump,但我必须重新计算代码点。我真的很想看到实际的 unicode 代码点,所以我可以用谷歌搜索它们并找出发生了什么。
编辑:我要补充一点,我不想将其转码为不同的编码(因为这是我在网上发现的)。我有 UTF8 格式的文件,这很好。我只想知道所有字母的确切代码点。
有没有什么简单的方法可以在特定目录中查找文件名中包含任何非 ASCII(即 Unicode)字符的所有文件?我正在运行 Windows XP x64 SP2、NTFS 文件系统。
我正在尝试通过使用输入 unicode 字符,Alt+####但我无法输入。
在注册表编辑器中,我添加了一个名为EnableHexNumpad1的新字符串值HKCU\Control Panel\Input Method并重新启动,但没有任何变化。发生了什么?
我正在使用 Window 8.1,在 Word、Notepad、Chrome、Visual Studio 上尝试过,什么都没有...
有什么线索吗?提前致谢!
编辑:
reg query "HKCU\Control Panel\Input Method"
Run Code Online (Sandbox Code Playgroud)
输出:
HKEY_CURRENT_USER\Control Panel\Input Method
Show Status REG_SZ 1
EnableHexNumpad REG_SZ 1
HKEY_CURRENT_USER\Control Panel\Input Method\Hot Keys
Run Code Online (Sandbox Code Playgroud)
编辑:这是PEBKAC!
我试图输入诸如 Alt+2075 (?) 之类的东西,而没有实际输入 plus!感谢@JosefZ 为我澄清了这一点。
我试图在 Windows 7 中获取 robocopy 以生成 Unicode 日志,因为我有带有 Unicode 字符的文件。我使用的命令:
robocopy C:\mysource D:\mydest /mir /unilog:backup.log /tee
Run Code Online (Sandbox Code Playgroud)
文件副本有效并且屏幕输出正确,日志文件本身只包含胡言乱语。这与我使用命令提示符还是 Powershell 无关。
是什么赋予了?难道我做错了什么?
受此问题的启发,我可以使用该iconv命令生成带有 BOM 和指定字节序的 UTF-16 输出吗?
该iconv命令将文本从一种编码转换为另一种编码。
例如:
echo hello | iconv -f ascii -t utf-16
Run Code Online (Sandbox Code Playgroud)
生成 UTF-16 表示"hello\n"。
UTF-16 文件通常(但并非总是)以字节顺序标记 (BOM) 开头,它是 Unicode 字符的 2 字节编码U+FEFF。您可以通过检查前两个字节是FE FF或来确定带有 BOM 的 UTF-16 文件的字节序FF FE。
该iconv命令有几个用于生成 UTF-16 输出的选项:
$ iconv --list | grep -i utf-16
UTF-16//
UTF-16BE//
UTF-16LE//
Run Code Online (Sandbox Code Playgroud)
这个命令:
echo hello | iconv -f ascii -t utf-16be
Run Code Online (Sandbox Code Playgroud)
生成没有 BOM 的big-endian UTF-16 ;似乎假设如果您指定了字节顺序,则不需要在输出中指明它。同样,utf-16le生成没有 BOM …
一段时间以来,我一直在多个应用程序中使用省略号 8230的Alt 代码。几天前它停止工作,并&显示而不是…按Alt+ 8+ 2+ 3+ 0(在小键盘上)。这发生在我的台式机和我的笔记本电脑上(我将它与 一起使用Fn)。两者都在代码页 850 的 64 位 Win-7 上运行,并且两者都可能最近更新了 Windows 和 Opera 12。
此输入法被禁用的原因可能是什么,我该如何将其切换回来?
顺便说一句,我刚刚发现Alt+ 0+ 1+ 3+3确实有效。我还发现Alt+ 8+ 2+ 3+0在 WordPad 或 MsWord10 中仍然有效,但在 Opera 和 Notepad++ 中均无效 - 在插入之前,字符代码被转换为模数 256。
我刚刚意识到我的系统上有一个文件;它通常列出:
$ 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 信息?
有时,我在互联网上找到的 alt 代码在我的 PC 上不起作用,例如 Pi alt 代码 ( Alt+ 227) 抛出 ? 不是 ?。
所以我需要在剪贴板(或文件或任何地方)中使用该字符并将其转换为与我的系统兼容的 Alt 代码。这可能吗?
这是没有 tmux 的 urxvt

这是在配置中未启用 tmux 和 utf8 的 urxvt

这是在配置中启用了 tmux 和 utf8 的 urxvt

如何使 tmux 的行为与初始结果一致?
文本文件不包含字符编码信息,因此 Firefox 无法知道哪个是正确的。通过菜单View?Text encoding我可以选择合适的编码。我发现每次打开文本文件时我都会这样做,因为默认情况下它似乎总是设置为西方,但我的文本文件总是Unicode (UTF-8)。有没有办法将默认编码设置为 Unicode 而不是西方?
unicode ×10
linux ×2
windows-7 ×2
alt-code ×1
bash ×1
command-line ×1
encoding ×1
file-search ×1
filesystems ×1
firefox ×1
input ×1
keyboard ×1
opera ×1
robocopy ×1
terminal ×1
textfiles ×1
tmux ×1
typing ×1
urxvt ×1
utf-8 ×1
windows-8.1 ×1
windows-xp ×1