将字符串转换为韩语编码

时间:2013-05-29 12:01:03

标签: c# encoding

我正在提取韩国游戏(Ragnarok Online)的数据,以便为它建立一个数据库。多年来我没有问题将字符串从ISO-8859-1编码转换为c#中的EUC-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,它仍会转换为错误的。 代码页“Windows-949”在.net框架中是未知的。

这个的正确编码是什么,或者源字符串是错误的?

非常感谢。

/编辑:问题解决了。 似乎ISO-8859-1和EUC-KR都错了。如果我转换自1252 - > 949没关系。

2 个答案:

答案 0 :(得分:1)

感谢您添加编辑并回答您的问题。我有来自旧数据库的数据,其中数据以未正确显示的韩语编码存储。

在使用代码将数据转换为其他编码后数小时,我遇到了您的问题。我完成了代码转换,然后我开始从数据库条目中获取有效的韩语单词。

我的代码上下文来自.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();
    }






}

答案 1 :(得分:0)

Codepage 949上的德国维基页面比较了EUC-KR和949以及

  

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

     

与EUC-KR相比,尾随字节也可以在0x41的范围内   到0x7A

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

This MSDN page列出了.Net支持的代码页949。