我如何在C#中的字符串转换为UTF-8?(How can I transform string to

2019-07-17 15:46发布

我有我从第三方应用程序接收一个字符串,我想使用C#在我的Windows表面的任何语言正确显示。

由于不正确的编码,我的一块字符串看起来像这样在西班牙语:

行动组织

而它应该是这样的:

行动

根据对这个问题的答案: 如何知道C#字符串编码 ,我收到的编码应在UTF-8来了,但它是阅读Encoding.Default(大概ANSI?)。

我想这个字符串转换成真正的UTF8,但其中一个问题是,我只能看到Encoding类(UTF8只有Unicode属性)的一个子集,可能是因为我有限的窗户表面API。

我尝试过的一些片段,我发现在互联网上,但他们都没有被证明是成功迄今东方语言(如韩国)。 一个实例是如下所示:

var utf8 = Encoding.UTF8;
byte[] utfBytes = utf8.GetBytes(myString);
myString= utf8.GetString(utfBytes, 0, utfBytes.Length);     

我还试图提取字符串转换成一个字节数组,然后使用UTF8.GetString:

byte[] myByteArray = new byte[myString.Length];
for (int ix = 0; ix < myString.Length; ++ix)
{
    char ch = myString[ix];
    myByteArray[ix] = (byte) ch;
}

myString = Encoding.UTF8.GetString(myByteArray, 0, myString.Length);

你们是否有任何其他想法,我能试试吗?

Answer 1:

正如你所知道的字符串来作为Encoding.Default你可以简单地使用:

byte[] bytes = Encoding.Default.GetBytes(myString);
myString = Encoding.UTF8.GetString(bytes);

你可能有另一件事要记住:如果您使用Console.WriteLine输出一些字符串,那么你也应该写Console.OutputEncoding = System.Text.Encoding.UTF8; ! 或全部UTF8字符串将outputed为GBK ...



Answer 2:

string utf8String = "Acción";
string propEncodeString = string.Empty;

byte[] utf8_Bytes = new byte[utf8String.Length];
for (int i = 0; i < utf8String.Length; ++i)
{
   utf8_Bytes[i] = (byte)utf8String[i];
}

propEncodeString = Encoding.UTF8.GetString(utf8_Bytes, 0, utf8_Bytes.Length);

输出应该看起来像

行动组织

大亚湾€™的显示当天的

调用DecodeFromUtf8();

private static void DecodeFromUtf8()
{
    string utf8_String = "day’s";
    byte[] bytes = Encoding.Default.GetBytes(utf8_String);
    utf8_String = Encoding.UTF8.GetString(bytes);
}


Answer 3:

您的代码读取的UTF8编码字节的序列,并使用8位编码解码它们。

您需要修改代码以字节为UTF8解码。

或者( 不理想 ),你可以在错误的字符串数组,通过使用不正确的编码,然后重新解码字节UTF8编码转换回原始字节。



Answer 4:

如果您想保存任何字符串MySQL数据库这样做: - >

数据库字段结构I PHPMYADMIN [或任何其它控制面板]应该设置为UTF8-gerneral慈

2)你应该改变你的字符串[出。 textbox1.text]至字节,为此

2-1)定义字节[] ST2;

2-2)通过转换您的字符串[textbox1.text]为unicode [mmultibyte字符串]:

byte[] st2 = System.Text.Encoding.UTF8.GetBytes(textBox1.Text);

3)任何查询之前执行此SQL命令:

string mysql_query2 = "SET NAMES 'utf8'";
cmd.CommandText = mysql_query2;
cmd.ExecuteNonQuery();

3-2)现在你应该在插入该值通过实例名称字段:

cmd.CommandText = "INSERT INTO customer (`name`) values (@name)";

4)主要工作,很多解决方案都没有重视它下面的一行:你应该使用addwithvalue,而不是在命令参数添加象下面这样:

cmd.Parameters.AddWithValue("@name",ut);

++++++++++++++++++++++++++++++++++在你的数据库服务器享受到实实在在的数据,而不是????



Answer 5:

 Encoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(mystring));


Answer 6:

使用下面的代码片段,以获得从csv文件字节

protected byte[] GetCSVFileContent(string fileName)
    {
        StringBuilder sb = new StringBuilder();
        using (StreamReader sr = new StreamReader(fileName, Encoding.Default, true))
        {
            String line;
            // Read and display lines from the file until the end of 
            // the file is reached.
            while ((line = sr.ReadLine()) != null)
            {
                sb.AppendLine(line);
            }
        }
        string allines = sb.ToString();


        UTF8Encoding utf8 = new UTF8Encoding();


        var preamble = utf8.GetPreamble();

        var data = utf8.GetBytes(allines);


        return data;
    }

调用下面并将其保存为一个附件

           Encoding csvEncoding = Encoding.UTF8;
                   //byte[] csvFile = GetCSVFileContent(FileUpload1.PostedFile.FileName);
          byte[] csvFile = GetCSVFileContent("Your_CSV_File_NAme");


        string attachment = String.Format("attachment; filename={0}.csv", "uomEncoded");

        Response.Clear();
        Response.ClearHeaders();
        Response.ClearContent();
        Response.ContentType = "text/csv";
        Response.ContentEncoding = csvEncoding;
        Response.AppendHeader("Content-Disposition", attachment);
        //Response.BinaryWrite(csvEncoding.GetPreamble());
        Response.BinaryWrite(csvFile);
        Response.Flush();
        Response.End();


文章来源: How can I transform string to UTF-8 in C#?