首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UTF-8和and 8859-1的档案

UTF-8和and 8859-1的档案
EN

Stack Overflow用户
提问于 2019-09-17 07:54:25
回答 2查看 1.3K关注 0票数 3

目前,我有一个程序,它试图模仿(linux)文件命令的功能。我解析带有一些字符的.txt文件,并将其解释为各自的解释。然而,当涉及到I 8859-1(拉丁文1)时,我很难区分文件。因为它将ISO8859-1字符转换为UTF-8编码(例如,e6 = c3 b8?)。

,当我将这个.txt创建并传递到文件中时:

代码语言:javascript
复制
printf "æøå" > test.txt

file test.txt

它只返回:

UTF-8 Unicode文本,没有行终止符。

od -c -tx1 test.txt * :返回*

代码语言:javascript
复制
0000000 303 246 303 270 303 245
         c3  a6  c3  b8  c3  a5
0000006

有人能向我解释为什么会出现这种情况,因为‘UTF8’前缀包含在ISO8859-1编码中,然后被解释为编码吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-17 08:16:29

显然,您的文件包含UTF-8编码。例如,c3 a6æ的UTF-8编码。

可能您的系统区域设置为UTF-8。您可以通过运行locale命令来检查这一点。

若要将文件从UTF-8转换为use 8859-1,可以使用

代码语言:javascript
复制
recode utf8..iso8859-1 test.txt 

在这之后你会得到

代码语言:javascript
复制
$ od -c -tx1 test.txt            
0000000 346 370 345
         e6  f8  e5
0000003

正如R..所指出的,如果recode尚未安装,则可能必须安装它。您也可以使用iconv,但是这个工具不能进行就地修改.另见Best way to convert text files between character sets?https://unix.stackexchange.com/q/10241/330217

票数 4
EN

Stack Overflow用户

发布于 2019-09-17 12:36:13

博多的回答是正确的,但我认为你问题的根源在于“字符集”这个词的模糊性。所有这些字符都在ISO-8859-1中可用的字符集中,这是正确的,但这并不十分相关;这意味着,当将文本编码为ISO-8859-1时,您可以忠实地表示它们。" set“一词的歧义(有些甚至可以说是误用)就是为什么在现代用法中,这一概念被称为”编码字符集“,或者最好称为”字符编码“,以反映重要的方面是可用字符集合中的抽象字符如何映射到存储的表示形式。

作为集合,ISO-8859-1是Unicode的子集,因此是由UTF-8表示的字符集的子集。但是作为编码,除了ASCII的子集之外,它们在任何地方都不同意。ISO-8859-1中的所有其他字符在UTF-8中的表示方式与在ISO-8859-1中的表示方式不同;如果不是这样的话,就无法表示超过256个字符,因为在ISO-8859-1中,所有256个字节的含义都分配给了(单个字符)。

正如Bodo的答案所指出的,在UTF-8中编码为c3 a6,而在ISO-8859-1中编码为e6

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57969732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档