纠正 CentOS 上 mysql 转储中的变音符号

纠正 CentOS 上 mysql 转储中的变音符号

在我的 CentOS 服务器上,我有一个 mysql 表的转储文件,其中包含特殊的捷克字符(例如 á、é、č、ž)。当我使用 cat 查看文件时,特殊字符被破坏(例如 ĂĄ 而不是 á)。

我需要更正转储中的这些字符,然后将其导入回数据库。

我已经尝试了几种不同的方法,但没有一个有效,包括:

  • 使用 sed 用以下表达式替换字符 - cat c_schools | sed 's/ĂĄ/á/g' > c_schools- 但出现unterminated s command错误,
  • 在 VIM 中打开文件并手动修复它,但 VIM 不允许我输入校验字符,
  • 在 NANO 中打开文件并手动修复它,但 NANO 似乎根本无法使用该文件(即使我随着光标移动,文本也会发生变化)。

正如评论中所建议的,我再次在 VIM 中打开该文件并尝试以下命令:

  • set encoding=utf-8(这个完全没有效果),
  • set termencoding=iso8859-2(此后输出好多了,但某些字符仍然显示不正确,例如 ? 而不是 č、ě 或 š),
  • :set fileencoding(输出fileencoding=utf-8

当我通过 FTP 将文件复制到 Windows 计算机并在标准文本编辑器 (Notepad++) 中打开它时,它显示正确,并且使用的编码是 UTF-8,无 BOM。

答案1

这看起来像是显示为 ISO-8859-2 的 Unicode (UTF-8) 数据。本质上有两种可能性:

  1. 您的终端使用 ISO-8859-2 作为输出字符集。那么数据本身可能编码正确但显示不正确:您看到的是当您像 ISO-8859-2 一样显示 UTF-8 数据时预期的结果。尝试使用能够使用 UTF-8 的终端和/或编辑器。 (我不确定nano,但vim如果您使用 则可以使用 UTF-8 set encoding=utf-8。)

  2. 您的终端使用 UTF-8 作为输出字符集。那么数据本身的编码不正确:它是已从 ISO-8859-2“转换”为 UTF-8 的数据,即使它已经是 UTF-8 数据。您可以使用iconvrecode将 UTF-8 转换回 ISO-8859-2(或者更确切地说,“双重编码的 UTF-8”回正确的 UTF-8),例如,通过iconv -f UTF8 -t ISO_8859-2 yourinputfile.

您使用什么终端程序以及输出是什么echo $LC_CTYPE

相关内容