我有带 NTFS 文件系统的 Windows 7。我有如下文件名和目录名:
Kispál és a Borz - 02 - Tökéletes Helyettes
我想将它们转换为:
Kispál és a Borz - 02 - Tökéletes Helyettes
该文件系统能够存储类似的文件名フリー百科事典
,因此它肯定具有unicode支持。
正如我想象的那样,很久以前,它们是完美的。然后它们从 UTF-8 转移到 Latin-1 文件系统,然后又回到支持 UTF-8 的文件系统。理论上,所有信息都在那里,我可以用 C 编写一个程序来修复这些字符,但我认为某个地方已经有人这样做了。
您知道任何可以进行这种转换的实用程序吗?
答案1
我写了一个 C/C++ 混合程序来执行翻译部分(不重命名任何内容,只是将坏字节序列转换为好字节序列)。您可以使用本文末尾的链接下载它。
输入文件被解码为 UTF-8 流,转换为 UNICODE 代码位置序列,然后不会转换为任何其他代码页。所有代码位置都在 256 以下,它们代表原始 UTF-8 字符串的字节序列。所以我只是将这些代码位置作为字节写入输出。结果是正确的 UTF-8 字符串。它仍然不是我的问题的应用程序,而是解决方案的核心。
该程序是在 Linux 下编写和测试的,但应该可以在任何操作系统上运行。使用示例:
nil@hippy:~/playground/c++$ g++ utf8decode.cpp -o utf8decode
nil@hippy:~/playground/c++$ cat > file
Kispál és a Borz - 02 - Tökéletes Helyettes
nil@hippy:~/playground/c++$ cat file | ./utf8decode
Kispál és a Borz - 02 - Tökéletes Helyettes
Characters found: 48
nil@hippy:~/playground/c++$
我之前写过一个 UTF-8 字符计数器,然后我修改了它。一个小时之内我还没有写完整个程序。来源:http://pastebin.com/Hy7tVt5A http://pastebin.com/NFJUP0R5
答案2
我的问题是 Windows 10 资源管理器无法正确显示 Unicode 文件名。文件名是 Unicode 格式的,但屏幕上显示的是乱码。答案是,当我重新启动时,问题就消失了。
答案3
让我详细解释一下 dinar qurbanov 给出的答案。要修复 Total Commander v7 或更高版本中的文件名编码,您需要使用多重重命名工具 (Ctrl+M)。
在那里你会发现一个类似文件夹的按钮,点击它并选择“编辑名称”以获取包含文件名的文本文件。使用你喜欢的任何工具/编辑器修复它们后,将它们粘贴回去并关闭编辑器。