首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何修复在子目录中看起来不太好的UTF-8字符编码文件名

如何修复在子目录中看起来不太好的UTF-8字符编码文件名
EN

Unix & Linux用户
提问于 2022-01-11 07:52:12
回答 1查看 2.4K关注 0票数 2

我有像Käyttöohje.pdf这样的文件名。这应该是Käyttöohje.pdf

我可以使用以下命令对子目录中的所有文件进行转换:

代码语言:javascript
运行
复制
convmv -f utf8 -t iso-8859-1 -r --notest *

这会将Käyttöohje.pdf转换为Käyttöohje.pdf

问题是如果文件已经在表单Käyttöohje.pdf

文件Käyttöohje.pdf被转换为K'

如何更改上面的命令,以便

  • Käyttöohje.pdf被转换为Käyttöohje.pdf (单独使用)和
  • Käyttöohje.pdf仍被转换为Käyttöohje.pdf

\344''ytt'

如何更改上面的命令,以便

F18H19

D10被转换为D11 (单独使用)和

H212H113

D14仍被转换为D15

H216F217\366''ohje.pdf

如何更改上面的命令,以便

F18H19

D10被转换为D11 (单独使用)和

H212H113

D14仍被转换为D15

H216F217

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2022-01-11 08:21:17

您的不正确文件似乎是双UTF-8编码。

例如,ä U+00E4被编码为:

  1. U+00E4 -> 0xc30xa4 (UTF-8编码)
  2. 0xc3 -> 0xc30x83( in 8859-1 Ã -> UTF-8),0xa 4 -> 0xc3 0xa4 ( in 8859-1 ¤ -> UTF-8 ),其中U+00E4的UTF-8编码的每个字节被解释为是在单字节字符集(这里可能是in 8859-1或windows-1252)中对其他字符的编码,并在UTF-8中再次编码。

因此,使用convmv -f utf8 -t iso-8859-1来实现这一点是正确的。为了让那些不是双编码的文件单独保存,convmv有一个特殊的选项:--fixdouble,所以它应该是:

代码语言:javascript
运行
复制
convmv --fixdouble -f utf8 -t iso-8859-1 -r --notest .

convmv手册中有一个专门讨论这一问题的部分:

如何撤消双UTF-8 (或其他)编码的文件名有时可能会发生“双重编码”的某些文件名,例如,文件名已经被UTF-8编码,并且您意外地从某个字符集转换为UTF-8。您可以简单地通过相反的方式转换它来撤销它。从-字符集必须是UTF-8和对-字符集必须是从-字符集,你以前不小心使用。如果您使用“您应该检查以获得正确的结果,在没有“-notest”之前,"--qfrom“选项也可能有帮助,因为双utf-8文件名如果要打印的话,可能会搞砸您的终端--它们通常包含控制序列,这些控制序列会对终端窗口做一些有趣的事情。如果您对意外转换的字符集不确定,那么使用"--qfrom“是一种很好的方法,可以在不破坏文件名的情况下完成所需的编码。

通过in 8859-1(涵盖代码点U+0000 U+00FF)编码的双UTF文件将包含非ASCII字符序列,其中包括U+00C2 -> U+00F4范围(ÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóô)中的一个字符,以及U+0080 -> U+00BF范围中的一个或多个字符(U+0080到U+009F是控制字符加上非中断空间加上¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿)。这些序列相对不太可能出现在非双编码文本中,特别是考虑到U+00E0以上的字符(第一组中的小写字符)必须在第二组中至少跟随2个字符,所以convmv --fixdouble不太可能出错。

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

https://unix.stackexchange.com/questions/685865

复制
相关文章

相似问题

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