我想翻译这篇文章:
×וויר. העתיד של רשתות חברתיות והתקשורת ×©×œ× ×•
进入本文:
אוויר. העתיד של רשתות חברתיות והתקשורת שלנו
不知何故,这个网站:
http://www.pixiesoft.com/flip/
可以做到,我想知道我自己可以做什么(使用任何编程语言或软件)
将文件保存为UTF8不会这样做。
我对这个问题的动机是我有一个朋友导出的XML文件,其中包含乱码文本,我想将其转换为更正的希伯来文本文件。
XML导出最初是由MySQL导入和导出造成的,但是我没有修复它或追溯问题所需的信息。
感谢。
答案 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')