如何将字符串转换为c_中的utf-8?

How can I transform string to UTF-8 in C#?

我有一个从第三方应用程序收到的字符串,我想在我的Windows界面上以任何使用C_的语言正确显示它。

由于编码不正确,我的字符串中有一段在西班牙语中如下所示:

Acci?3n

但是应该是这样的:

Acción

根据这个问题的答案:如何知道C中的字符串编码,我正在接收的编码应该已经是UTF-8,但它是在编码时读取的。默认值(可能是ANSI?).

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

我试过在网上找到的一些片段,但到目前为止,没有一个在东方语言(即韩语)中被证明是成功的。一个例子如下:

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

我还尝试将字符串提取到字节数组中,然后使用utf8.getstring:

1
2
3
4
5
6
7
8
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);

你们还有什么我可以尝试的想法吗?


如您所知,字符串的形式是Encoding.Default,您可以简单地使用:

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

您可能还需要记住的另一件事是:如果您使用console.writeline来输出一些字符串,那么您还应该编写Console.OutputEncoding = System.Text.Encoding.UTF8;!!!!否则所有的utf8字符串都将输出为gbk…


1
2
3
4
5
6
7
8
9
10
string utf8String ="Acci?3n";
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);

输出应该看起来像

Acción

daya€?s displays
day's

调用decodeFromutf8();

1
2
3
4
5
6
private static void DecodeFromUtf8()
{
    string utf8_String ="daya€?s";
    byte[] bytes = Encoding.Default.GetBytes(utf8_String);
    utf8_String = Encoding.UTF8.GetString(bytes);
}


您的代码正在读取一个由utf8编码的字节序列,并使用8位编码对其进行解码。

您需要修复该代码以将字节解码为utf8。

或者(不理想),您可以将坏字符串转换回原始字节数组,方法是使用不正确的编码对其进行编码,然后将字节重新解码为utf8。


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

如果要将任何字符串保存到MySQL数据库,请执行以下操作:->

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

2)您应该将字符串[例如textbox 1.text]更改为byte,因此

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

2-2)将字符串[textbox 1.text]转换为unicode[mmultibyte string]的方式:

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

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

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

3-2)现在,您应该将此值插入到,例如"名称"字段,方法是:

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

4)很多解决方案不关注的主要工作是:您应该使用addWithValue,而不是如下所示的加载项命令参数:

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

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


使用下面的代码段从csv文件获取字节

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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;
    }

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
           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();