黑马程序员技术交流社区

标题: 文件导入数据库, 中文乱码 怎么解决?? [打印本页]

作者: 王继光    时间: 2012-6-17 16:43
标题: 文件导入数据库, 中文乱码 怎么解决??
如题, 一个 txt文件中, 存放了一些数据,然后 字母存放的数据导入数据库中没问题, 但中文出现乱码.. 怎么解决??  网上找了很多资料, 不行..
作者: 戴伟    时间: 2012-6-17 17:07
首先数据库的表字段要设置成nchar或者nvarchar,支持中文格式的,记得要n字头的,然后读取文本文件的时候用encoding的utf8格式读取,
StreamReader streamReader = new StreamReader(fileReader, Encoding.UTF8)
作者: 黑马龙超    时间: 2012-6-17 17:31
本帖最后由 黑马龙超 于 2012-6-17 17:33 编辑


首先
检查一下数据库字段类型是不是nvarchar,这是Unicode字符,满足中文

其次
用StreamReader的话,在后加一个参数Encoding.default:StreamReader streamReader = new StreamReader(file, Encoding.default)
用File.ReadAllLine,在后也加一个参数File.ReadAllLine(file,Encoding.default)
作者: 杨朔    时间: 2012-6-17 20:42
JAVA在网络传输中使用的编码是"ISO-8859-1",故在输出时需要进行转化,而且如果你用的是MySql,MySQL默认编码是latin1,设置MySQL的默认字符集为utf-8,
把涉及到的字符都改为utf-8,应该可以。
作者: 王继光    时间: 2012-6-17 22:13
戴伟 发表于 2012-6-17 17:07
首先数据库的表字段要设置成nchar或者nvarchar,支持中文格式的,记得要n字头的,然后读取文本文件的时候用 ...

这个方法 我实验了, 不行.    加入后面的  Endcoding.UTF8 没有报错误, 但 问题依然存在
作者: 王继光    时间: 2012-6-17 22:14
黑马龙超 发表于 2012-6-17 17:31
首先
检查一下数据库字段类型是不是nvarchar,这是Unicode字符,满足中文

在 new的时候  加一个参数, 加你说的 Endcoding.default直接报错  此方法也不行!
作者: 王继光    时间: 2012-6-17 22:16
杨朔 发表于 2012-6-17 20:42
JAVA在网络传输中使用的编码是"ISO-8859-1",故在输出时需要进行转化,而且如果你用的是MySql,MySQL默认编 ...

同学, 你是不是 发错区了,, 这边是 .net 区.  不是 JAVA
作者: 吴伟烈    时间: 2012-6-17 22:44
解决方法如下
1.将数据库字段类型改成nvarchar
2.在中文前加N, insert 表名 values(1,N"中文")
作者: 王继光    时间: 2012-6-17 22:56
吴伟烈 发表于 2012-6-17 22:44
解决方法如下
1.将数据库字段类型改成nvarchar
2.在中文前加N, insert 表名 values(1,N"中文") ...

你这说的 2点不行.   
1.  这个 数据类型肯定是 设置的 nvarchar
2. 在 insert语句中, 我们采用的是 先写 @ 参数,再  加参数的 方法, 用拼接字符串的方法, 这个加N的方法 在指定死字符串的时候可以, 但 如果是 字符串变量要填里面就不行 ...
作者: 王继光    时间: 2012-6-17 22:58
自己查找资料无数. 实验无数,  终于解决  导入中文乱码的问题,  解决方法如下:
StreamReader streamReader =
       new StreamReader(fileStream, System.Text.Encoding.GetEncoding("gb2312")  )



作者: 王志波    时间: 2012-6-24 19:27
那就是编码的问题了StreamReader srAsciiFromFile =
        new StreamReader("C:\\Temp\\Test.txt",
        System.Text.Encoding.gb2312);





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2