【问题标题】:Encode UTF8 text to Unicode C# [duplicate]将 UTF8 文本编码为 Unicode C# [重复]
【发布时间】:2020-02-20 08:15:04
【问题描述】:

如何将 UTF8 文本编码为 Unicode?​​p>

string text_txt = "пÑивеÑ";    
byte[] bytesUtf8 = Encoding.Default.GetBytes(text_txt);
text_txt = Encoding.UTF8.GetString(bytesUtf8);

问题是输出:п??иве�

我需要输出:привет

使用该网站:https://www.branah.com/unicode-converter 在“UTF-8 text (Example: a 中 Я)”中输入文本到“пÑивеє,它将在 Unicode 文本上显示“привет”

请多多指教,谢谢

【问题讨论】:

  • 你的意思是Encoding.Unicode.GetString(bytesUtf8); 吗?
  • 顺便说一句没有区别。如果使用它输出:뿐㿑룐닐뗐�
  • 正确的输出是什么?
  • 我认为文本不是 UTF8 格式。尝试使用this site 找出该文本的编码。
  • 正确的输出是“привет”

标签: c# decode encode


【解决方案1】:
   byte[] utf8Bytes = new byte[text_txt.Length];
                for (int i = 0; i < text_txt.Length; ++i)
                {
                    //Debug.Assert( 0 <= utf8String[i] && utf8String[i] <= 255, "the char must be in byte's range");
                    utf8Bytes[i] = (byte)text_txt[i];
                }
                text_txt= Encoding.UTF8.GetString(utf8Bytes, 0, text_txt.Length);

来自答案:How to convert a UTF-8 string into Unicode?

【讨论】:

    【解决方案2】:

    嗯,你可能是这个意思:

    // Forward: given in UTF-8 represented in WIN-1252
    
      byte[] data = Encoding.UTF8.GetBytes("привет");
      string text = Encoding.GetEncoding(1252).GetString(data);
    
    // Reverse: given in WIN-1252 represented in UTF-8
    
      byte[] reversedData = Encoding.GetEncoding(1252).GetBytes("привет");
      string reversedText = Encoding.UTF8.GetString(reversedData);
    
      Console.WriteLine($"{string.Join(" ", data)} <=> {text}");
      Console.WriteLine(reversedText);
    

    结果:

    208 191 209 128 208 184 208 178 208 181 209 130 <=> привет
    привет
    

    请注意,您省略了 , 字符:

     Ð¿Ñ Ð¸Ð²ÐµÑ  - actual string
     привет - should be
    

    【讨论】:

      【解决方案3】:

      您需要明确说明用于转换为字节的编码类型 (Syste.Text.Encoding.UTF8.GetBytes)。例如:

      using System;
      using System.Text;
      
      public class Program {
          public static void Main() {
              string text_txt = "пÑивеÑ";
      
              byte[] bytesUtf8 = Encoding.UTF8.GetBytes(text_txt);
              text_txt = Encoding.UTF8.GetString(bytesUtf8);
      
              Console.WriteLine(text_txt);
          }
      }
      

      这种方式 UTF8 用于编码和解码字符串以相同的方式,并且当您确保从 GetString 方法返回相同的字符串时。

      【讨论】:

      • 你在你的主机上试过了吗?没有任何转换..
      • 他的原始帖子将“пÑивеє转换为 п�?иве�。我认为这是他的问题,但我不清楚为什么张贴者期望输入应该产生“привет”而不是输入一旦反转。
      猜你喜欢
      • 1970-01-01
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 2018-08-28
      • 2011-07-11
      • 1970-01-01
      • 2017-05-26
      • 2012-03-18
      相关资源
      最近更新 更多