[C#] C #에서 문자열을 UTF-8로 변환하는 방법은 무엇입니까?

타사 앱에서받은 문자열이 있으며 Windows Surface에서 C #을 사용하여 모든 언어로 올바르게 표시하고 싶습니다.

잘못된 인코딩으로 인해 내 문자열 부분은 스페인어로 다음과 같습니다.

아키 엔

반면 다음과 같이 보일 것입니다 :

아치 온

이 질문에 대한 답변에 따르면 :
C #에서 문자열 인코딩을 아는 방법은 수신중인 인코딩이 이미 UTF-8로 제공되어야하지만 Encoding.Default (아마도 ANSI?)에서 읽습니다.

이 문자열을 실제 UTF-8로 변환하려고하지만 문제 중 하나는 Encoding 클래스의 하위 집합 (UTF8 및 유니 코드 속성 만)을 볼 수 있다는 것입니다. 아마도 Windows Surface 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);

내가 시도 할 수있는 다른 아이디어가 있습니까?



답변

아시다시피 문자열은 다음과 같이 Encoding.Default간단하게 사용할 수 있습니다.

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

기억해야 할 또 다른 사항 : Console.WriteLine을 사용하여 일부 문자열을 출력하는 경우 Console.OutputEncoding = System.Text.Encoding.UTF8;!!! 또는 모든 utf8 문자열이 gbk로 출력됩니다 …


답변

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

출력은 다음과 같아야합니다

아치 온

day ‘s는 요일을 표시합니다

DecodeFromUtf8 ()을 호출하십시오.

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


답변

코드가 UTF8로 인코딩 된 바이트 시퀀스를 읽고 8 비트 인코딩을 사용하여 디코딩합니다.

바이트를 UTF8로 디코딩하려면 해당 코드를 수정해야합니다.

또는 ( 이상적이지 않은 ) 잘못된 문자열을 잘못된 인코딩을 사용하여 인코딩하여 원래 바이트 배열로 다시 변환 한 다음 바이트를 UTF8로 다시 디코딩 할 수 있습니다.


답변

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


답변

mysql 데이터베이스에 문자열을 저장하려면 다음을 수행하십시오.

데이터베이스 필드 구조 i phpmyadmin [또는 다른 제어판]은 utf8-gerneral-ci로 설정해야합니다

2) 문자열을 변경해야합니다 [예 : textbox1.text]를 바이트로 변환

2-1) 바이트 정의 [] st2;

2-2) 다음과 같이하여 문자열 [textbox1.text]를 유니 코드 [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) 이제이 값을 예를 들어 name 필드에 삽입해야합니다.

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

4) 많은 솔루션이주의를 기울이지 않은 주요 작업은 다음과 같습니다. 아래와 같이 명령 매개 변수에 add 대신 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();


답변