微软不认识杜甫?

时间:2021-01-16 04:18:48
把Datagrid中的数据导出为EXCEL时出现乱码

找了N天原因,才发现原来是有个人名字叫“杜甫”(变态,干吗起这个名字)

把这个名字改成其他的,就正常……

(什么utf-7 utf-8统统试过了,都是乱码)

兄弟们导出数据时碰到过带“甫”的字没?怎么搞定的?

36 个解决方案

#1


是这个原因吗?甫 有不是什么生僻字
我没遇到过
帮顶

#2


这也搞笑了吧

#3


啥事都有啊

#4


高人啊,这个问题都让你碰到了。
gb2312 试过没?

#5


还有这事情?我测试一下

#6


这个比较搞笑,属于特例加以推广

#7




刚刚经过 我测试了   导出到 Excel 后能显示 杜甫..一点错误都没有啊 

3 杜甫 男 江海通 4.201E+17 1956-4-30 0:00
4 杜甫 男 航道局 4.30425E+17 1974-4-18 0:00
5 杜甫 男 个体 5.10232E+17 1970-3-21 0:00
6 廖中建 男 重庆长航 5.10212E+17 1963-9-23 0:00
7 黄绪刚 男 长航交科 3.20108E+14 1974-10-11 0:00

===========微软怎么会 犯这么低级的错误..

#8


呵呵

#9


我测试也米问题 测试代码如下
try
{
string strCmd = string.Empty;
                conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;HDR=No';" + "Data Source= " + @"C:\Documents and Settings\Administrator\桌面\test.xls");
                cmd = new OleDbCommand();
                cmd.Connection = conn;


                conn.Open();
                strCmd = "create Table [Sheet1](";
                foreach (DataColumn dc in ds.Tables[0].Columns)
                {
                    strCmd += "[" + dc.ColumnName + "] nvarchar(20),";
                }
                strCmd = strCmd.Trim().Substring(0, strCmd.Length - 1);
                strCmd += ")";
                cmd.CommandText = strCmd;

                cmd.ExecuteNonQuery();

                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    if (dr.RowState != System.Data.DataRowState.Deleted)
                    {
                        strCmd = "insert into [Sheet1] values(";
                        foreach (DataColumn dc in ds.Tables[0].Columns)
                        {
                            strCmd += "'" + dr[dc.ColumnName].ToString() + "',";
                        }

                        strCmd = strCmd.Substring(0, strCmd.Length - 1);
                        strCmd += ")";

                        cmd.CommandText = strCmd;
                        
                        cmd.ExecuteNonQuery();
                       

                    }
                }
                conn.Close();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

#10


晕,难道楼主是来踢场子的?

#11


我晕,楼主,你是不是跟微软过不去啊

#12


杜甫——没有问题啊。。。。。。。。奇怪了~~

#13


楼住肯定就叫杜甫

#14


我没有问题啊~

#15


楼主乃杜甫后人,借机吵作而已!

#16


同意民工兄,呵呵

#17


立案调查楼主

#18


微软的记事本才有个bug呢


新建一个文本文件,用记事本打开。
输入一下字符

fuck you six times

保存,关闭记事本,然后再用记事本打开,你会看到....

#19


不骗人,真的
两万多条记录,我一点一点排查的

到最后发现:把甫字改成其他字,就没有任何问题,再改回去,立刻乱码

#20


对了,不是乱码,是韩文

#21


楼上说的是真的

#22


杨杨说的是真的

#23


Go_Rush(我的技术博客http://ashun.cnblogs.com/) ( ) 信誉:98  2007-07-19 09:21:18  得分: 0  
 
 
   微软的记事本才有个bug呢


新建一个文本文件,用记事本打开。
输入一下字符

fuck you six times

保存,关闭记事本,然后再用记事本打开,你会看到....
  
 
--------------------------------------------------
怎么回事???

#24


楼上的输入:联通 试一试.

#25


畦正礠畯猠硩琠浩獥

#26


记事本输入以下字符,并保存,关闭,然后再用记事本打开
four one two three

#27


four one two three


真的 怎么会这样啊 ? 谁能解释 一下 啊  ?

#28


潦牵漠敮琠潷琠牨敥

#29


太搞笑了

#30


这也行。。。用其他编辑器打开是好的。。。

#31


安逸,

#32


畦正礠畯猠硩琠浩獥

#33


那微软认识李白不?

#34


搞笑

#35


好玩,

#36


微软不认识我

#1


是这个原因吗?甫 有不是什么生僻字
我没遇到过
帮顶

#2


这也搞笑了吧

#3


啥事都有啊

#4


高人啊,这个问题都让你碰到了。
gb2312 试过没?

#5


还有这事情?我测试一下

#6


这个比较搞笑,属于特例加以推广

#7




刚刚经过 我测试了   导出到 Excel 后能显示 杜甫..一点错误都没有啊 

3 杜甫 男 江海通 4.201E+17 1956-4-30 0:00
4 杜甫 男 航道局 4.30425E+17 1974-4-18 0:00
5 杜甫 男 个体 5.10232E+17 1970-3-21 0:00
6 廖中建 男 重庆长航 5.10212E+17 1963-9-23 0:00
7 黄绪刚 男 长航交科 3.20108E+14 1974-10-11 0:00

===========微软怎么会 犯这么低级的错误..

#8


呵呵

#9


我测试也米问题 测试代码如下
try
{
string strCmd = string.Empty;
                conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;HDR=No';" + "Data Source= " + @"C:\Documents and Settings\Administrator\桌面\test.xls");
                cmd = new OleDbCommand();
                cmd.Connection = conn;


                conn.Open();
                strCmd = "create Table [Sheet1](";
                foreach (DataColumn dc in ds.Tables[0].Columns)
                {
                    strCmd += "[" + dc.ColumnName + "] nvarchar(20),";
                }
                strCmd = strCmd.Trim().Substring(0, strCmd.Length - 1);
                strCmd += ")";
                cmd.CommandText = strCmd;

                cmd.ExecuteNonQuery();

                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    if (dr.RowState != System.Data.DataRowState.Deleted)
                    {
                        strCmd = "insert into [Sheet1] values(";
                        foreach (DataColumn dc in ds.Tables[0].Columns)
                        {
                            strCmd += "'" + dr[dc.ColumnName].ToString() + "',";
                        }

                        strCmd = strCmd.Substring(0, strCmd.Length - 1);
                        strCmd += ")";

                        cmd.CommandText = strCmd;
                        
                        cmd.ExecuteNonQuery();
                       

                    }
                }
                conn.Close();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

#10


晕,难道楼主是来踢场子的?

#11


我晕,楼主,你是不是跟微软过不去啊

#12


杜甫——没有问题啊。。。。。。。。奇怪了~~

#13


楼住肯定就叫杜甫

#14


我没有问题啊~

#15


楼主乃杜甫后人,借机吵作而已!

#16


同意民工兄,呵呵

#17


立案调查楼主

#18


微软的记事本才有个bug呢


新建一个文本文件,用记事本打开。
输入一下字符

fuck you six times

保存,关闭记事本,然后再用记事本打开,你会看到....

#19


不骗人,真的
两万多条记录,我一点一点排查的

到最后发现:把甫字改成其他字,就没有任何问题,再改回去,立刻乱码

#20


对了,不是乱码,是韩文

#21


楼上说的是真的

#22


杨杨说的是真的

#23


Go_Rush(我的技术博客http://ashun.cnblogs.com/) ( ) 信誉:98  2007-07-19 09:21:18  得分: 0  
 
 
   微软的记事本才有个bug呢


新建一个文本文件,用记事本打开。
输入一下字符

fuck you six times

保存,关闭记事本,然后再用记事本打开,你会看到....
  
 
--------------------------------------------------
怎么回事???

#24


楼上的输入:联通 试一试.

#25


畦正礠畯猠硩琠浩獥

#26


记事本输入以下字符,并保存,关闭,然后再用记事本打开
four one two three

#27


four one two three


真的 怎么会这样啊 ? 谁能解释 一下 啊  ?

#28


潦牵漠敮琠潷琠牨敥

#29


太搞笑了

#30


这也行。。。用其他编辑器打开是好的。。。

#31


安逸,

#32


畦正礠畯猠硩琠浩獥

#33


那微软认识李白不?

#34


搞笑

#35


好玩,

#36


微软不认识我