八进制 302 240 在一起似乎对应于不间断空格

八进制 302 240 在一起似乎对应于不间断空格

通过查看文本文件的特定行(例如第 1123 行,见下文),似乎存在不间断空格,但我不确定:

$ cat myfile.csv | sed -n 1123p | cut -f2
Lisztes feher

$ cat myfile.csv | sed -n 1123p | cut -f2 | od -An -c -b
   L   i   s   z   t   e   s 302 240   f   e   h   e   r  \n
 114 151 163 172 164 145 163 302 240 146 145 150 145 162 012

但是,那ASCII 码八进制表示不间断空格是240。那么302对应什么?这个给定的文件有什么特别之处吗?

我问这个问题是为了理解。我已经知道如何使用sed来解决我的问题,遵循此回答:

$ cat myfile.csv | sed -n 1123p | cut -f2 | sed 's/\xC2\xA0/ /g' | od -An -c -b
   L   i   s   z   t   e   s       f   e   h   e   r  \n
 114 151 163 172 164 145 163 040 146 145 150 145 162 012

有关信息,原始文件位于 .xlsx (Excel) 格式。当我的电脑运行时徐本图,我打开它自由办公室Calc (v5.1)。然后,我将其保存为“文本 CSV”,其中“字符集 = Unicode (UTF-8)”并使用制表符作为字段分隔符:

$ file myfile.csv
myfile.csv: UTF-8 Unicode text

答案1

它是 U+00A0 Unicode 字符的 UTF-8 编码:

$ unicode U+00A0
U+00A0 NO-BREAK SPACE
UTF-8: c2 a0 UTF-16BE: 00a0 Decimal:   Octal: \0240
 
Category: Zs (Separator, Space)
Bidi: CS (Common Number Separator)
Decomposition: <noBreak> 0020

$ locale charmap
UTF-8
$ printf '\ua0' | od -to1
0000000 302 240
0000002

UTF-8 是 Unicode 的一种编码,每个字符的字节数可变。 Unicode 作为字符集是 iso8859-1(又名 latin1)的超集,本身是 ASCII 的超集。

在 iso8859-1 中,不间断空格字符(iso8859-1 中的代码点 0xa0,如 Unicode 中的代码点)将表示为一个 0xa0 字节,而在 UTF-8 中,只有代码点 0 到 127 被表示为一个字节(这使得 UTF-8 成为 ASCII 的超集,换句话说,ASCII 文件也是 UTF-8 文件)。

超过 128 的代码点使用每个字符更多的字节进行编码。看维基百科有关 UTF-8 编码算法的详细信息。

答案2

Alt-Gr302 240 是+的组合space

在法语键盘上,当您想在 a 后面键入空格时,|很容易 在您想要 + 时键入Alt-gr+ | Alt-gr+ ,然后会出现错误。spaceAlt-gr| space

相关内容