mantis bug管理系统的二次asp.net 接口开发的时候,碰到编码的问题,如上述标题。

此系统的功能比较好,开源的php+myql.

mysql 的 默认设置

file:my.ini

[mysql]

default-character-set=latin1

[mysqld]

default-character-set=latin1

mysql 数据库的编码细节查询都是latin1编码。

mysql character

 

Mantis 系统的Mysql数据库链接
    数据库编码方式:latin1
    当前项目文档的编码方式: utf8
   
    对中文字符串的更新操作和查询操作需要编码格式转换
    转换方式:Formarter.GetEncodeToLatin|Formarter.GetEncodeFromLatin
   
    更新sql语句之前使用set names latin1;
    例如:
        插入数据
        sql = "set names latin1;insert into tableName( col1 ) values( '?col1')"
        MySqlCommand comm = new MySqlCommand(sql, conn);
        MySqlParameter pcol1 = new MySqlParameter("?col1", MySqlDbType.VarChar);
        //编码转换
        pcol1.Value = Formarter.GetEncodeToLatin(col1);
        comm.Parameters.Add(pcol1);
       
        //查询数据
        sql = "set names latin1;select realName from mantis_user_table where id=" + reporterUserId;
        comm = new MySqlCommand(sql, conn);
        dr = comm.ExecuteReader();
        if (dr.Read())
        {
            reporterRealName = dr["realName"].ToString();
            //编码转换
            reporterRealName = Formarter.GetEncodeFromLatin(reporterRealName);
        }
        dr.Close();

 

 

 

 

        public static string GetEncodeToLatin(string src)
        
{
            
return System.Text.Encoding.GetEncoding("latin1").GetString(System.Text.Encoding.Default.GetBytes(src));
        }



        
public static string GetEncodeFromLatin(string src)
        
{
            
return System.Text.Encoding.Default.GetString(System.Text.Encoding.GetEncoding("latin1").GetBytes(src));

      
        }

 

 

页面的编码也要统一,尽可能使用System.Text.Encoding.Default获取默认的编码方式,而不是utf8方式

 

在数据库中编码改变时,sql语句的set names latin1也要相应的变化才能正常录入中文