这个网站如何修改编码?

时间:2010-05-15 12:03:57

标签: mysql encoding character-encoding hebrew utf-8

我想翻译这篇文章:

×וויר. העתיד של רשתות חברתיות והתקשורת ×©×œ× ×•

进入本文:

אוויר. העתיד של רשתות חברתיות והתקשורת שלנו

不知何故,这个网站:

http://www.pixiesoft.com/flip/

可以做到,我想知道我自己可以做什么(使用任何编程语言或软件)

将文件保存为UTF8不会这样做。

我对这个问题的动机是我有一个朋友导出的XML文件,其中包含乱码文本,我想将其转换为更正的希伯来文本文件。

XML导出最初是由MySQL导入和导出造成的,但是我没有修复它或追溯问题所需的信息。

感谢。

6 个答案:

答案 0 :(得分:4)

由于问题是带有双重编码的UTF8字符串的MySQL错误,MySQL是解决它的正确方法。

运行以下命令将解决它 -

  • mysqldump $DB_NAME -u $DB_USER -p -h $DB_HOST.EXAMPLE.NET --add-drop-table --default-character-set=latin1 > export.sql - 此处使用latin1强制MySQL不分割字符,否则不应使用。
  • cp export{,.utf8}.sql - 制作备份副本。
  • sed -i -e 's/latin1/utf8/g' export.utf8.sql - 用文件中的utf8替换latin1,以便将其导入为UTF-8而不是8859-1。
  • mysql $DB_NAME -u $DB_USER -p -h $DB_HOST.EXAMPLE.NET < export.utf8.sql - 将所有内容导回数据库。

这将在大约十分钟内解决问题。

答案 1 :(得分:2)

如果仔细观察乱码,可以说每个希伯来字符都被编码为2个字符 - של似乎被编码为של

这表明您将UTF8或UTF16视为ASCII。转换为UTF8无济于事,因为它已经是ASCII并且将保持该编码。

您可以读取每对字节并从中重构原始UTF8。

这是我提出的一些C# - 这非常简单(不完全正常 - 假设太多),但我可以看到一些角色正确转换:

private string ToProperHebrew(string gibberish)
{
   byte[] orig = Encoding.Unicode.GetBytes(gibberish);
   byte[] heb = new byte[orig.Length / 2];

   for (int i = 0; i < orig.Length / 2; i++)
   {
     heb[i] = orig[i * 2];
   }

   return Encoding.UTF8.GetString(heb);
}

如果出现每个字节被重新编码为两个字节 - 不确定使用了什么编码,但丢弃一个字节对于大多数加倍的字符似乎是正确的。

答案 2 :(得分:2)

您可能希望查看here - 此问题的接受答案显示了如何猜测byte[]的编码方式。那么你需要确保的是从乱码中得到正确的字节。 猜测可能总是失败,当然......

答案 3 :(得分:1)

您可以使用元标记为网页设置正确的编码。以下是如何执行此操作的示例:

&lt; meta http-equiv =“Content-Type”content =“text / html; charset = Windows-1255”/&gt;

我认为这种编码可以完成这项工作。

答案 4 :(得分:1)

基于Oded和Teddy的答案,我提出了这种方法,对我有用:

public String getProperHebrew(String gibberish){
    byte[] orig = gibberish.getBytes(Charset.forName("windows-1252"));

    try {
        return new String(orig, "UTF-8");
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
        return "";
    }
}

答案 5 :(得分:0)

gibberish.encode('windows-1252').decode('utf-8', 'replace')