如何在C#中将string转换为UTF-8?

我有一个string,我从第三方应用程序接收,我想在我的Windows Surface上使用C#在任何语言正确显示它。

由于编码不正确,我的一段string看起来像西class牙文:

Acción

而应该看起来像这样:

行动组织

根据这个问题的答案: 如何知道在C#中的string编码,我收到的编码应该已经在UTF-8,但它是在Encoding.Default(可能ANSI?)上读取。

我试图将这个string转换为真正的UTF-8,但其中一个问题是我只能看到Encoding类的一个子集(仅限于UTF8和Unicode属性),可能是因为我仅限于Windows Surface API。

我已经尝试了一些我在互联网上find的片段,但是迄今为止,没有一个片段certificate对于东方语言(即韩国)是成功的。 一个例子如下:

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

我也尝试将string解压缩到一个字节数组,然后使用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); 

你们有没有其他想法可以尝试?

正如你知道的string进入Encoding.Default你可以简单地使用:

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

另一件事你可能要记住:如果你使用Console.WriteLine来输出一些string,那么你也应该写Console.OutputEncoding = System.Text.Encoding.UTF8; ! 或所有的utf8string将输出为gbk …

您的代码正在读取一系列UTF8编码的字节,并使用8位编码进行解码。

您需要修复该代码,将字节解码为UTF8。

或者( 不理想的 ),你可以将坏string转换回原来的字节数组 – 通过使用不正确的编码进行编码 – 然后重新解码字节为UTF8。

  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); } 

如果你想保存任何string到MySQL数据库,请执行以下操作: – >

你的数据库字段结构phpmyadmin [或任何其他控制面板]应设置为utf8-gerneral-ci

2)你应该改变你的string[例如。 textbox1.text]转换为字节

2-1)定义byte [] st2;

2-2)通过以下方式将string[textbox1.text]转换为unicode [mmultibyte string]

 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)很多解决scheme都不关注它的主要工作是下面的行:你应该使用addwithvalue而不是像下面那样添加命令参数:

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

++++++++++++++++++++++++++++++++++享受数据库服务器中的真实数据,而不是?

使用下面的代码片段从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(); 
  Encoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(mystring)); 

尝试这个:

 String.Format("N'{0}'", myString); 

我正在使用这个代码来保存数据在SQL中的真实数据,而不是未知(??????????)