我使用了iconv和mb_convert_encoding两个函数都试了,然后发现结果是一样的,都会出现各种问题,不是哪里少字了就是直接错误,请问大神怎么解决啊
回复讨论(解决方案) iconv(gb2312,utf-8//ignore,$data)
确定 原数据是 gb2312编码吗
是的 确定了 是ansi格式的
是的 确定了 是ansi格式的
你的文件页面编码是什么? 要不把代码贴出来看看
是这样的 在做一个scv文件的导入功能 然后用记事本打开显示保存编码是ansi,现在用fgetcvs来循环,在里面怎么弄都是不正常的。之前用记事本打开保存为utf-8导入功能是ok的 ,所以页面编码应该是utf-8
gb2312 是 gbk 的子集
ucs-2 是 gbk 的变体
ucs-2 与 utf-8 间存在简单的位移操作
所以从 gb2312 或 gbk 转换到 utf-8 不存在数据丢失的现象
反过来就有丢失的可能了
ansi 不能说明任何问题
ansi 泛指国家标准,计算机中指的是操作系统的默认字符集(可手工修改)
以 windows 为例,简体中文系统就是 gbk、繁体中文系统就是 big5
那帮忙看下好吗 我填写的cvs文件中地区的信息是湖北省,湖南省,广东省,通过iconv('gb2312','utf-8',$str),就转成一个‘省’字,假如是山东省或者山西省是完全翻译,四川省翻译成‘拇ㄊ’,这个是什么原因啊 卡了2天了
你能把你的文件放到云盘吗?
或是
echo base64_encode(file_get_contents('你的csv文件名', false, null, 0, 1000));
贴出结果
结果是这样的:
然后我用 echo iconv('gbk','utf-8',file_get_contents($file['tmp_name']));return false;
得到的完全都是utf8的数据,可惜这样不是我想要的
1、贴出 base64 数据
2、说一下你打算做什么
把代码贴出来 看一下 简单的叙述你的需求
sedc6yxduk2x4mlrlmp7s8ysvpkzxizq0nk1lck/zbunwodqzaoosozkwrsmojes1+7w1b/nu6c6miy0+sdtycw6m6opiiwivehl48dg0m2jqnfu1tw/zbunojesvehl47/nu6c6mizp+srbv827pzozo6kilmv5yvs/zbunlmv51nrh+npylmgqz7xiyyzbqs+1ymu157uwllxy1rcssbjxoiyxuneimiyxuneimw0klgznz2csc2rmz2zkaggsc2fklm28yum53dtewmdk0iwzldaszmrnzgznlmm9tqvkosxhc2rmzywxmzgwmdezodawmcxmzghmz2hmlgfhysxiymisy2njdqo=
我想要的就是通过fgetcsv函数循环每行记录组成数组,存入数据库 但是直接file_get_contents的话拿到的想做到这种效果比较困难,因为在cvs文件里好多个字段,有些可填有些必填。所以才那么纠结
那根编码转换有什么关系
$fp = fopen('你的csv文件名', 'r');while($row = fgetcsv($fp)) { $res[] = $row;}print_r($res);
谢谢版主大大这么晚了还在帮忙解决问题 ,是这样的 ,cvs文件的编码是gb2312的,数据库编码是utf8的,然后我装进数组之前要把这里获取到的数据和库里面的做比对,来获取我要的数据,而且cvs文件里好多字段的都是汉字,所以要转码才能入库,问题是在外面file_get_contents之后转码可以进去循环里面一个一个转码就不行。
不需要转码
只需在比较之前执行一次 mysql_query('set names gbk'); 就可以了
版主大大 再问一个问题啊 ,那我的gbk编码的数据如何入库啊,库里面是utf8的编码,我怀疑是不是fegtcvs这个函数的作用啊 ,再里面转码就不行在外面转码就可以
gbk 的数据插入到 utf8 的表,只需在插入前执行一次 mysql_query('set names gbk'); 就可以了
mysql_query(' set names gbk');
这条指令的作用是:通知 mysql 现在用 gbk 字符集进行操作
转码的工作由 mysql 自己完成
恩 谢谢版主大大 ,虽然说我换了file代替了fgetcsv实现了功能