我有一个带有 BOM 的 UTF-8 编码文件,想删除 BOM。是否有任何 linux 命令行工具可以从文件中删除 BOM?
$ file test.xml
test.xml: XML 1.0 document, UTF-8 Unicode (with BOM) text, with very long lines
Run Code Online (Sandbox Code Playgroud) 我刚刚看到了某人终端的屏幕截图:

是否有可以在 Bash 提示中使用的所有字符的列表,或者有人可以为我提供星星和右箭头的字符吗?
我想为一个提供翻译字符串的开源项目做出贡献。他们的要求之一是贡献者必须使用 UTF-8 作为 PO 文件的编码。
我在 Linux 上使用 VIM 7.3。我如何确定 VIM 的编码设置为 UTF-8,以便我可以以正确的方式编辑和保存 .po 文件?
我有一个未知或混合编码的文本文件。我想查看包含无效 UTF-8 字节序列的行(通过将文本文件传输到某个程序中)。同样,我想过滤掉有效的 UTF-8 行。换句话说,我正在寻找.grep [notutf8]
如果我执行以下简单脚本:
#!/bin/bash
printf "%-20s %s\n" "Früchte und Gemüse" "foo"
printf "%-20s %s\n" "Milchprodukte" "bar"
printf "%-20s %s\n" "12345678901234567890" "baz"
Run Code Online (Sandbox Code Playgroud)
它打印:
Früchte und Gemüse foo
Milchprodukte bar
12345678901234567890 baz
Run Code Online (Sandbox Code Playgroud)
也就是说,带有变音符号(例如ü)的文本每个变音符号“缩小”一个字符。
当然,我在某处有一些错误的设置,但我无法弄清楚可能是哪一个。
如果文件的编码为 UTF-8,则会发生这种情况。
如果我将其编码更改为 latin-1,则对齐是正确的,但变音符号呈现错误:
Fr?chte und Gem?se foo
Milchprodukte bar
12345678901234567890 baz
Run Code Online (Sandbox Code Playgroud) 所以我在 stackoverflow 上查看了这个答案,并意识到我的字体没有涵盖很多 utf-8 unicode 范围(因为我得到了很多正方形)。有谁知道一种可以覆盖所有帖子的字体?
例如:
sed 's/\u0091//g' file1
Run Code Online (Sandbox Code Playgroud)
现在,我必须做得到hexdump十六进制数并输入sed如下:
$ echo -ne '\u9991' | hexdump -C
00000000 e9 a6 91 |...|
00000003
Run Code Online (Sandbox Code Playgroud)
进而:
$ sed 's/\xe9\xa6\x91//g' file1
Run Code Online (Sandbox Code Playgroud) 我最近更新了我的 Arch Linux 服务器,在这个过程中 tmux 得到了更新。我tmux在升级过程中使用它,然后使用它,但都是在同一个 SSH 会话中使用的。
但是,现在,每当我尝试发出任何tmux命令时,都会收到此错误:
tmux: need UTF-8 locale (LC_CTYPE) but have ANSI_X3.4-1968
Run Code Online (Sandbox Code Playgroud)
这是locale -a服务器上的输出:
$ locale -a
C
POSIX
Run Code Online (Sandbox Code Playgroud)
在我的机器上(Ubuntu 15.10):
$ locale -a
C
C.UTF-8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
POSIX
Run Code Online (Sandbox Code Playgroud)
这是怎么回事,我该如何解决?
我正在尝试从文件(UTF-8)中删除一些字符。我tr为此目的使用:
tr -cs '[[:alpha:][:space:]]' ' ' <testdata.dat
Run Code Online (Sandbox Code Playgroud)
文件包含一些外来字符(如“??????????”或“àé”)。tr似乎不理解它们:它将它们视为非 alpha 并删除。
我试过更改我的一些语言环境设置:
LC_CTYPE=C LC_COLLATE=C tr -cs '[[:alpha:][:space:]]' ' ' <testdata.dat
LC_CTYPE=ru_RU.UTF-8 LC_COLLATE=C tr -cs '[[:alpha:][:space:]]' ' ' <testdata.dat
LC_CTYPE=ru_RU.UTF-8 LC_COLLATE=ru_RU.UTF-8 tr -cs '[[:alpha:][:space:]]' ' ' <testdata.dat
Run Code Online (Sandbox Code Playgroud)
不幸的是,这些都没有奏效。
我怎样才能tr理解Unicode?
我正在使用以下命令将十六进制代码 0900(而不是?)的字符集范围 grep 到 097F(而不是?)。我如何使用十六进制代码代替 ? 和 ??
bzcat archive.bz2 | grep -v '<[?-?]*\s' | tr '[:punct:][:blank:][:digit:]' '\n' | uniq | grep -o '^[?-?]*$' | sort -f | uniq -c | sort -nr | head -50000 | awk '{print "<w f=\""$1"\">"$2"</w>"}' > hindi.xml
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
<w f="399651">??</w>
<w f="264423">??</w>
<w f="213707">??</w>
<w f="74728">??</w>
<w f="44281">??</w>
<w f="35125">??</w>
<w f="26628">?</w>
<w f="23981">??</w>
<w f="22861">??</w>
...
Run Code Online (Sandbox Code Playgroud)
我只想使用十六进制代码而不是 ? 和 ?在上面的命令中。
如果根本不可能使用十六进制代码,我可以使用 unicode 代替十六进制代码作为字符集 ('?-?') 吗?
我正在使用 Ubuntu 10.04