【问题标题】:C# - converting UTF-8 to Ukranian encodingC# - 将 UTF-8 转换为乌克兰编码
【发布时间】:2011-12-08 08:53:58
【问题描述】:

我试图将此字符串的编码从 utf-8 转换为乌克兰语“ÐÑайвеÑ-длÑ-пÑинÑеÑа-Pixma-ip-2000-длÑ-Windows -7-64-биє。 每当我将它从 utf8 转换为 ukranian 时,我都会得到一个损坏的字符串......

正确的字符串应该类似于“Драйвер-для-принтера-Pixma-ip-2000-для-Windows-7-64-бит”..

请指教..谢谢

编辑:这是我转换它的方式..

private string EncodeUTF8toOther(string inputString, string to)
        {
            try
            {  
                // Create two different encodings.
                byte[] myBytes = Encoding.Unicode.GetBytes(inputString);

                // Perform the conversion from one encoding to the other.            
                byte[] convertedBytes = Encoding.Convert(Encoding.Unicode, Encoding.GetEncoding(to), myBytes);

                return Encoding.GetEncoding("ISO-8859-1").GetString(convertedBytes);

            }
            catch
            {
                return inputString;
            }
        }

乌克兰语字符集是“KOI8-U”

更多信息:我对这个问题有类似的问题: c# HttpWebResponse Header encoding

位置标头给了我这个损坏的字符串。我需要正确编码才能执行重定向..

【问题讨论】:

  • 您的字符串从一开始就看起来像“ÐÑайве...”?那么它已经损坏了。
  • 帖子更新了..请检查一下。
  • 是的,您的字符串似乎已经损坏/如果您尝试进行反向转换,您将得到损坏的刺痛:'System.Text.Encoding.UTF8.GetString(Encoding.GetEncoding("ISO-8859 -1").GetBytes("ÐÑайвеÑ-длÑ-пÑинÑеÑа-Pixma-ip-2000-длÑ-Windows-7-64-биÑ") )' 结果为 '��айве�-дл�-п�ин�е�а-Pixma-ip-2000-дл�-Windows-7-64-би�'
  • 我应该怎么做才能解决这个问题?我也注意到了.. 是 httpWebResponse 的问题吗?

标签: c# encoding utf-8


【解决方案1】:

Encoding.Unicode 是 UTF-16,而不是 UTF-8。如果您确定您的源字符串以 UTF-8 编码,请改用 Encoding.UTF8。

返回一个字符串没有任何意义。字符串始终以 UTF-16 编码。只有在读取和写入字符串时才应该担心编码。

读取时,使用 Encoding.UTF8.GetString 从二进制数据创建一个 UTF-16 字符串。

写入时,要么使用 Encoding.GetEncoding(destinationEncoding).GetBytes 获取二进制数据并直接写入,要么使用 StreamWriter 构造函数(或您正在使用的任何对象)的重载来指定编码。

【讨论】:

  • 我在发现其他问题后更新了答案。
【解决方案2】:

您需要在输入时正确解码字符串,如下所示:

 StreamReader rdr = new StreamReader( args[0], Encoding.UTF8 );
 string str = rdr.ReadToEnd();
 rdr.Close();

是物理的,你必须知道它的编码是什么。

另一方面,字符串是合乎逻辑的。 内部用于字符串的编码与您无关; 除了它可以代表什么字符; 它可以表示所有字符,因为内部编码适用于 Unicode。 (如果内部编码为 KOI-8 则无法表示德语或法语字符。)

输出你不得不再次担心编码。

如果您未在输入和输出上指定编码,则假定为平台默认值。 这可能不是你想要的。 了解并指定输入和输出的编码是一种很好的做法。

【讨论】:

    【解决方案3】:
    "ÐÑайвеÑ-длÑ-пÑинÑеÑа-Pixma-ip-2000-длÑ-Windows-7-64-биÑ".
    

    它已经是 UTF-8 了!您不必进行任何转换。只需让 Windows 知道它的 UTF-8。像这样的东西可以完成这项工作:

    wb.Encoding = Encoding.UTF8;
    

    【讨论】:

      猜你喜欢
      • 2012-06-30
      • 2011-06-26
      • 2014-02-02
      • 1970-01-01
      • 2012-01-15
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2011-01-28
      相关资源
      最近更新 更多