AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 685865
Accepted
George
George
Asked: 2022-01-11 23:52:12 +0800 CST2022-01-11 23:52:12 +0800 CST 2022-01-11 23:52:12 +0800 CST

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

  • 772

我有像Käyttöohje.pdf. 这应该是Käyttöohje.pdf。

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

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'$'\344''ytt'$'\366''ohje.pdf

如何更改上述命令,以便

  • Käyttöohje.pdf被转换为Käyttöohje.pdf(单独留下)和
  • Käyttöohje.pdf仍然转换为Käyttöohje.pdf
character-encoding
  • 1 1 个回答
  • 972 Views

1 个回答

  • Voted
  1. Best Answer
    Stéphane Chazelas
    2022-01-12T00:21:17+08:002022-01-12T00:21:17+08:00

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

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

    1. U+00E4 -> 0xc3 0xa4(UTF-8 编码)
    2. 0xc3 -> 0xc3 0x83 (iso8859-1 Ã-> UTF-8), 0xa4 -> 0xc3 0xa4 (iso8859-1 ¤-> UTF-8) 其中 U+00E4 的 UTF-8 编码的每个字节都被解释为是在单字节字符集(这里可能是 iso8859-1 或 windows-1252)中对某些其他字符进行编码,并在 UTF-8 中再次编码。

    所以你使用它是正确convmv -f utf8 -t iso-8859-1的。要单独保留未双重编码的文件,convmv有一个特殊选项:--fixdouble,所以它应该是:

    convmv --fixdouble -f utf8 -t iso-8859-1 -r --notest .
    

    convmv手册中有专门的部分:

    如何撤消双 UTF-8(或其他)编码文件名

    有时您可能会“双重编码”某些文件名,例如文件名已经是 UTF-8 编码,而您不小心将某些字符集转换为 UTF-8。您可以通过相反的方式简单地撤消它。from-charset 必须是 UTF-8,to-charset 必须是您之前不小心使用的 from-charset。如果您使用“--fixdouble”选项,convmv 将确保仅处理转换后仍为 UTF-8 编码的文件,并且不会触及非 UTF-8 文件。您应该通过在没有“--notest”之前进行转换来检查以获得正确的结果,“--qfrom”选项可能会有所帮助,因为如果打印双 utf-8 文件名可能会搞砸您的终端 - 它们通常包含控制序列,这些控制序列会在您的终端窗口中做一些有趣的事情。如果您不确定意外转换的字符集,使用“--qfrom”是一种在不破坏文件名的情况下整理所需编码的好方法。

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

    • 4

相关问题

  • 在 CentOS 7 上对二进制文件进行 base64 编码的正确方法是什么?

  • /proc/<pid>/cmdline 的意外非空编码

  • 如何翻译 Unicode 字符?[复制]

  • 变音符号的问题(无法输入终端+无法打开文件)

  • 如何让`less`理解代码页?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve