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
    • 最新
    • 标签
主页 / ubuntu / 问题 / 609138
Accepted
Seyed Mohammad
Seyed Mohammad
Asked: 2015-04-15 03:38:44 +0800 CST2015-04-15 03:38:44 +0800 CST 2015-04-15 03:38:44 +0800 CST

转换文本文件编码

  • 772

我经常遇到有字符编码问题的文本文件(例如我的母语波斯语的字幕文件)。这些文件是在 Windows 上创建的,并使用不合适的编码(似乎是 ANSI)保存,看起来乱码且不可读,如下所示:

在此处输入图像描述

在 Windows 中,可以使用Notepad++将编码转换为 UTF-8 轻松解决此问题,如下所示:

在此处输入图像描述

而正确的可读结果是这样的:

在此处输入图像描述

我在 GNU/Linux 上搜索了很多类似的解决方案,但不幸的是建议的解决方案(例如这个问题)不起作用。最重要的是,我看到人们建议使用这些工具iconv,recode但我没有运气。我测试了很多命令,包括以下命令,但都失败了:

$ recode ISO-8859-15..UTF8 file.txt
$ iconv -f ISO8859-15 -t UTF-8 file.txt > out.txt
$ iconv -f WINDOWS-1252 -t UTF-8 file.txt > out.txt 

这些都不起作用!

我正在使用 Ubuntu-14.04,我正在寻找一个像 Notepad++ 一样工作的简单解决方案(GUI 或 CLI)。

“简单”的一个重要方面是用户不需要确定源编码;相反,源编码应该由工具自动检测,而用户只应提供目标编码。但是,尽管如此,我也很高兴知道需要提供源编码的工作解决方案。

如果有人需要测试用例来检查不同的解决方案,可以通过此链接访问上面的示例。

encoding
  • 8 8 个回答
  • 46291 Views

8 个回答

  • Voted
  1. Incnis Mrsi
    2015-08-19T05:38:02+08:002015-08-19T05:38:02+08:00

    这些带有波斯语文本的 Windows 文件以Windows-1256编码。所以它可以通过类似于 OP 尝试的命令来破译,但使用不同的字符集。即:

    recode Windows-1256..UTF-8 <Windows_file.txt > UTF8_file.txt
    (根据原发布者的投诉进行谴责;见评论)

    iconv -f Windows-1256 Windows_file.txt > UTF8_file.txt
    

    这个假设 LANG 环境变量设置为 UTF-8 语言环境。要转换为任何编码(UTF-8 或其他),无论当前语言环境如何,可以说:

    iconv -f Windows-1256 Windows_file.txt -t ${output_encoding} > ${output_file}
    

    原始海报也与文本重新编码工具(recode,iconv)的语义混淆。对于源代码编码(source..或 -f),必须指定保存文件的编码(由创建它的程序)。不是基于尝试(但失败)读取它的程序中的 mojibake 字符的一些(天真的)猜测。为波斯文本尝试 ISO-8859-15 或 WINDOWS-1252 显然是一个僵局:这些编码只是不包含任何波斯字母。

    • 13
  2. Best Answer
    Seyed Mohammad
    2015-10-06T08:02:54+08:002015-10-06T08:02:54+08:00

    我找到的可行解决方案是使用Microsoft Visual Studio Code文本编辑器,它是免费软件,可用于 Linux。

    在 VS-Code 中打开要转换其编码的文件。在窗口的底部,有几个按钮。其中之一与文件编码有关,如下所示:

    在此处输入图像描述

    单击此按钮会弹出一个包含两个项目的开销菜单。从此菜单中选择“使用编码重新打开”选项,如下所示:

    在此处输入图像描述

    这将打开另一个菜单,其中包含不同编码的列表,如下所示。现在选择“阿拉伯语(Windows 1256)”:

    在此处输入图像描述

    这将像这样修复乱码文本:

    在此处输入图像描述

    现在再次单击编码按钮,这次选择“使用编码保存”选项,如下所示:

    在此处输入图像描述

    在新菜单中选择“UTF-8”选项:

    在此处输入图像描述

    这将使用 UTF-8 编码保存更正后的文件:

    在此处输入图像描述

    完毕! :)

    • 3
  3. Ken Mollerup
    2015-04-15T10:02:51+08:002015-04-15T10:02:51+08:00

    我不知道这是否适用于波斯语:我使用 Gedit,它给出了错误编码的错误,我可以选择我想翻译成 UTF-8 的内容,它只是文本而不是点亮格式,但这是屏幕截图!

    在此处输入图像描述

    对不起,我终于看完了我的文本文件,所以现在它们都被转换了。

    我也喜欢记事本++,仍然怀念它。

    • 2
  4. Giorgos_tph
    2017-04-15T16:12:30+08:002017-04-15T16:12:30+08:00

    除了iconv它本身或在脚本中是一个非常有用的工具之外,还有一个非常简单的解决方案,我发现它试图找出希腊字符集 (Windows-1253 + ISO-8859-7) 的相同问题。

    All you need to do is to open the text file through Gedit's "Open" dialog and not by double-clicking it. At the bottom of the dialog box there is a drop-down for Encoding, which is set to "Automatically Detected". Change it to "Windows-125x" or other suitable codeset and the text will be perfectly readable in Gedit. You can then save it using UTF-8 encoding, just to be sure you won't have the same issue again in the future...

    • 2
  5. Seyed Mohammad
    2015-08-21T04:02:16+08:002015-08-21T04:02:16+08:00

    作为该问题的补充解决方案,我根据Incnis Mrsi 的回答iconv中的命令准备了一个有用的 Bash 脚本:

    #!/bin/bash
    
    if [ $# -lt 1 ]
    then
       echo 'Specify at least one file to fix.'
       exit 1
    fi
    
    # Temp file to store conversion attempt(s).
    tmp='tmp.fixed'
    
    for file in "$@"
    do
      # Try to fix the file encoding.
      if iconv -f WINDOWS-1256 "$file" -t UTF-8 > $tmp; then
        echo "Fixed: '$file'"
        cat $tmp > "$file"
      else
        echo "Failed to fix: '$file'"
      fi
    done
    rm $tmp
    

    将此脚本另存为fix-encoding.sh,赋予它执行权限chmod +x fix-encoding.sh,并像这样使用它:

    ./fix-encoding.sh myfile.txt my2ndfile.srt my3rdfile.sub
    

    此脚本将尝试修复作为输入提供的任意数量文件的编码。请注意,文件将就地固定,因此内容将被覆盖。

    • 1
  6. Christos
    2017-04-21T13:36:46+08:002017-04-21T13:36:46+08:00

    If you like working in GUI instead of CLI, like I do:

    1. Open file with Geany (editor)
    2. Go to File menu -> Reload as
    3. Choose the assumed encoding to change the gibberish into identifiable characters in your language. For example, to read Greek subs I would reload as West European -> Greek (Windows-1253)
    4. Go to Document menu > Set Encoding -> Unicode -> UTF-8
    5. Save
    • 1
  7. muru
    2021-04-09T07:28:16+08:002021-04-09T07:28:16+08:00

    You can use Vim to do the encoding conversion:

    vim '+set fileencoding=utf-8' '+wq' file.txt
    

    但这取决于 Vim 是否正确检测到原始编码。要使其在不正确的情况下使用正确的,您可以执行以下操作:

    vim '+e ++enc=cp1256 file.txt | set fileencoding=utf-8 | wq'
    

    或者,要保存到不同的文件而不是就地保存:

    vim '+e ++enc=cp1256 file.txt | w ++enc=utf-8 file-utf.txt | q'
    
    • 1
  8. Amir Mahdavi
    2021-02-09T04:13:34+08:002021-02-09T04:13:34+08:00

    I figured out it in manjaro with gaupol and work perfect but you must do it one by one and don't have batch mode

    https://github.com/otsaloma/gaupol https://pkgs.org/download/gaupol

    Just open a file (no matter source encoding) Save As (Shift + Ctrl + S) In opened window, change Encoding to UTF-8 Hit Save and finished

    • 0

相关问题

  • 无需重新编码即可拆分 ogg-theora 视频文件?

  • CRON 正在改变编码?

  • 应用程序从 MP3 文件和 GIF 图片创建视频?

Sidebar

Stats

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

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve