将字符串转换为韩语编码

本文关键字:韩语 编码 转换 字符串 | 更新日期: 2023-09-27 18:15:47

我正在提取韩国游戏(Ragnarok Online)的数据,以建立一个数据库。多年来,我没有遇到任何问题,将字符串从ISO-8859-1编码转换为c#中的eu - kr编码。

我用来转换字符串的函数是这样的:

return Encoding.GetEncoding("EUC-KR").GetString(Encoding.GetEncoding("ISO-8859-1").GetBytes(text);

例子
º»Ç︧ -> 본헬름

现在我遇到一些字符不能正确转换,我不知道为什么。

ansi字符串被转换为

Œc¾ç²á -> Oc양꿍

是错误的。我在notepad++中测试了一点编码,如果我将字符串转换为韩语(Windows-949而不是EUC-KR),它会显示正确的字符串。

똠양꿍

但是在c#中,如果我使用Codepage 949,它仍然转换为错误的一个。.net框架中不知道代码页"Windows-949"。

这是正确的编码还是源字符串只是错误的?

非常感谢。

/edit: problem solved。看来ISO-8859-1和eu - kr是错的。如果我从1252转换到949,它是好的

将字符串转换为韩语编码

感谢您为您的问题添加了答案。我有来自旧数据库的数据,其中数据以韩语编码存储,无法正确显示。

经过几个小时的代码转换数据到不同的编码,我遇到了你的问题。我做了代码页1252到代码页949的转换,然后我开始从数据库条目中获得有效的韩语单词。

我的代码上下文来自一个。net表单web应用程序,我包括下面的Page_load函数来提供如何从一种编码转换到另一种编码的示例代码:

protected void Page_Load(object sender, EventArgs e)
{
    string strConn = System.Configuration.ConfigurationManager.ConnectionStrings["DictionaryConnection"].ToString();
    using (SqlConnection conn = new SqlConnection(strConn))
    {
        conn.Open();
        string strSQL = "Select top(100) * from Parts";

        SqlCommand command = new SqlCommand(strSQL, conn);
        SqlDataReader sdr = command.ExecuteReader();
        DataTable dt = new DataTable();
        dt.Load(sdr);

        sdr.Close();

        StringBuilder sbOut = new StringBuilder();

        sbOut.Append("<table border='"1'">");
        sbOut.Append("<tr>");
        foreach (DataColumn dc in dt.Columns)
        {
            sbOut.Append("<th>" + dc.ColumnName + "</th>");
        }
        sbOut.Append("</tr>");
        foreach (DataRow dr in dt.Rows)
        {
        sbOut.Append("<tr>");
        foreach (DataColumn dc in dt.Columns)
        {
            string strOut = "";
            if (dr[dc] != null)
            {
                if (dc.ColumnName=="Part_h")
                {

                    int euckrCodepage = 949;//949;//51949;
                    System.Text.Encoding originalEncoding = System.Text.Encoding.GetEncoding(1252);

                    System.Text.Encoding euckr = System.Text.Encoding.GetEncoding(euckrCodepage);
                    StringBuilder sbEncoding= new StringBuilder();

                    sbEncoding.Append("RAW: " + dr[dc].ToString() + "<br />");

                   byte[] rawbytes= originalEncoding.GetBytes(dr[dc].ToString());

                   string s = euckr.GetString(rawbytes);
                    sbEncoding.Append("STRING AS "+euckr.EncodingName+": " + s + "<br />");

                    strOut = sbEncoding.ToString();
                }
                else
                {
                strOut = dr[dc].ToString();    
                }
            }
            sbOut.Append("<td>" + strOut + "</td>");
        }
            sbOut.Append("</tr>");
        }
        sbOut.Append("</table>");
    conn.Close();
    lblText.Text = sbOut.ToString();
    }



}

Codepage 949上的德语wiki页面比较了eu - kr和949以及各州

im Gegensatz zu EUC-KR kann sich das nachfolgende Byte jedoch each imBereich von 0x41-0x7A befinden

与EUC-KR不同的是,

的尾字节也可以在0x41的范围内0 x7a

适用于你的'c' (0x63)的情况。

此MSDN页面列出。net支持的代码页949。