source

C#에서 문자열을 UTF-8로 변환하려면 어떻게 해야 합니까?

manysource 2023. 8. 23. 21:53

C#에서 문자열을 UTF-8로 변환하려면 어떻게 해야 합니까?

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

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

아크엔

반면에 이것은 다음과 같이 보여야 합니다.

액시온

이 질문에 대한 답변에 따르면:C#에서 문자열 인코딩을 아는 방법, 내가 받고 있는 인코딩은 이미 UTF-8에 와야 하는데 인코딩에서 읽힙니다.기본값(아마도 ANSI?).

이 문자열을 실제 UTF-8로 변환하려고 하지만 문제 중 하나는 Windows 표면 API로 제한되어 있기 때문에 Encoding 클래스의 하위 집합(UTF8 및 Unicode 속성만)만 볼 수 있다는 것입니다.

인터넷에서 찾은 몇 개의 스니펫을 시도해 보았지만, 아직까지 동양 언어(예: 한국어)에 대해 성공적인 것으로 입증된 것은 없습니다.한 가지 예는 다음과 같습니다.

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

여러분이 기억해야 할 또 다른 것은:콘솔을 사용하는 경우.일부 문자열을 출력하려면 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는 일을 표시합니다.

Utf8()에서 디코드 호출;

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

@또 다른 거친 대답이 저에게 효과가 있었습니다.StringEntensions 클래스를 사용하여 프로그램에서 문자열을 쉽게 변환할 수 있도록 개선했습니다.

방법:

public static class StringExtensions
{
    public static string ToUTF8(this string text)
    {
        return Encoding.UTF8.GetString(Encoding.Default.GetBytes(text));
    }
}

용도:

string myString = "Acción";
string strConverted = myString.ToUTF8();

간단히 말하면:

string strConverted = "Acción".ToUTF8();

mysql 데이터베이스에 문자열을 저장하려면 다음을 수행합니다. ->

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

문자열을 변경해야 합니다 [예: 텍스트 상자1].텍스트] 바이트로, 바이트로

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

2-2) 문자열 [textbox1]을 변환합니다.text]에서 [mmultibyte string]을(를) 다음과 같이 유니코드합니다.

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

쿼리 전에 다음 sql 명령을 실행합니다.

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

3-2) 이제 다음을 통해 예를 들어 이름 필드에 이 값을 삽입해야 합니다.

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

많은 솔루션이 주목하지 않았던 주요 작업은 다음과 같습니다. 아래와 같은 addin 명령 매개 변수 대신 addwith value를 사용해야 합니다.

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

언급URL : https://stackoverflow.com/questions/14057434/how-can-i-transform-string-to-utf-8-in-c