如何把数据从GB2312转换成UTF-8

时间:2021-03-24 08:43:15
我使用了iconv和mb_convert_encoding两个函数都试了,然后发现结果是一样的,都会出现各种问题,不是哪里少字了就是直接错误,请问大神怎么解决啊

18 个解决方案

#1


iconv("GB2312","UTF-8//IGNORE",$data) 

#2


确定 原数据是 GB2312编码吗

#3


是的  确定了 是ANSI格式的

#4


引用 3 楼 u013485824 的回复:
是的  确定了 是ANSI格式的

你的文件页面编码是什么? 要不把代码贴出来看看

#5


是这样的 在做一个scv文件的导入功能 然后用记事本打开显示保存编码是ANSI,现在用fgetcvs来循环,在里面怎么弄都是不正常的。之前用记事本打开保存为utf-8导入功能是OK的 ,所以页面编码应该是utf-8

#6


GB2312 是 GBK 的子集
UCS-2 是 GBK 的变体
UCS-2 与 UTF-8 间存在简单的位移操作

所以从 GB2312 或 GBK 转换到 UTF-8 不存在数据丢失的现象
反过来就有丢失的可能了

ANSI 不能说明任何问题
ANSI 泛指国家标准,计算机中指的是操作系统的默认字符集(可手工修改)
以 windows 为例,简体中文系统就是 GBK、繁体中文系统就是 BIG5

#7


那帮忙看下好吗 我填写的cvs文件中地区的信息是湖北省,湖南省,广东省,通过iconv('GB2312','UTF-8',$str),就转成一个‘省’字,假如是山东省或者山西省是完全翻译,四川省翻译成‘拇ㄊ’,这个是什么原因啊 卡了2天了  如何把数据从GB2312转换成UTF-8

#8


你能把你的文件放到云盘吗?
或是
echo base64_encode(file_get_contents('你的csv文件名', false, null, 0, 1000));
贴出结果

#9


结果是这样的:
如何把数据从GB2312转换成UTF-8

然后我用 echo iconv('GBK','UTF-8',file_get_contents($file['tmp_name']));return false;
得到的完全都是utf8的数据,可惜这样不是我想要的

#10


1、贴出 base64 数据
2、说一下你打算做什么

#11


把代码贴出来  看一下   简单的叙述你的需求

#12


seDC6yxDUk2x4MLrLMP7s8YsvPKzxizQ0NK1LCK/zbunwODQzaOosOzKwrSmOjEs1+7W1b/Nu6c6Miy0+sDtycw6M6OpIiwiveHL48Dg0M2jqNfu1tW/zbunOjEsveHL47/Nu6c6MizP+srbv827pzozo6kiLMv5yvS/zbunLMv51NrH+NPyLMGqz7XIyyzBqs+1yMu157uwLLXY1rcssbjXoiyxuNeiMiyxuNeiMw0KLGZnZ2csc2RmZ2ZkaGgsc2FkLM28yum53dTEwMDK0iwzLDAsZmRnZGZnLMm9tqvKoSxhc2RmZywxMzgwMDEzODAwMCxmZGhmZ2hmLGFhYSxiYmIsY2NjDQo=
我想要的就是通过fgetcsv函数循环每行记录组成数组,存入数据库 但是直接file_get_contents的话拿到的想做到这种效果比较困难,因为在cvs文件里好多个字段,有些可填有些必填。所以才那么纠结

#13


那根编码转换有什么关系
$fp = fopen('你的csv文件名', 'r');
while($row = fgetcsv($fp)) {
  $res[] = $row;
}
print_r($res);

#14


谢谢版主大大这么晚了还在帮忙解决问题 ,是这样的 ,cvs文件的编码是gb2312的,数据库编码是utf8的,然后我装进数组之前要把这里获取到的数据和库里面的做比对,来获取我要的数据,而且cvs文件里好多字段的都是汉字,所以要转码才能入库,问题是在外面file_get_contents之后转码可以进去循环里面一个一个转码就不行。

#15


不需要转码
只需在比较之前执行一次 mysql_query('set names gbk'); 就可以了

#16


版主大大  再问一个问题啊 ,那我的gbk编码的数据如何入库啊,库里面是utf8的编码,我怀疑是不是fegtcvs这个函数的作用啊 ,再里面转码就不行在外面转码就可以

#17


gbk 的数据插入到 utf8 的表,只需在插入前执行一次 mysql_query('set names gbk'); 就可以了

mysql_query(' set names gbk');
这条指令的作用是:通知 mysql 现在用 gbk 字符集进行操作
转码的工作由 mysql 自己完成

#18


恩 谢谢版主大大 ,虽然说我换了file代替了fgetcsv实现了功能

#1


iconv("GB2312","UTF-8//IGNORE",$data) 

#2


确定 原数据是 GB2312编码吗

#3


是的  确定了 是ANSI格式的

#4


引用 3 楼 u013485824 的回复:
是的  确定了 是ANSI格式的

你的文件页面编码是什么? 要不把代码贴出来看看

#5


是这样的 在做一个scv文件的导入功能 然后用记事本打开显示保存编码是ANSI,现在用fgetcvs来循环,在里面怎么弄都是不正常的。之前用记事本打开保存为utf-8导入功能是OK的 ,所以页面编码应该是utf-8

#6


GB2312 是 GBK 的子集
UCS-2 是 GBK 的变体
UCS-2 与 UTF-8 间存在简单的位移操作

所以从 GB2312 或 GBK 转换到 UTF-8 不存在数据丢失的现象
反过来就有丢失的可能了

ANSI 不能说明任何问题
ANSI 泛指国家标准,计算机中指的是操作系统的默认字符集(可手工修改)
以 windows 为例,简体中文系统就是 GBK、繁体中文系统就是 BIG5

#7


那帮忙看下好吗 我填写的cvs文件中地区的信息是湖北省,湖南省,广东省,通过iconv('GB2312','UTF-8',$str),就转成一个‘省’字,假如是山东省或者山西省是完全翻译,四川省翻译成‘拇ㄊ’,这个是什么原因啊 卡了2天了  如何把数据从GB2312转换成UTF-8

#8


你能把你的文件放到云盘吗?
或是
echo base64_encode(file_get_contents('你的csv文件名', false, null, 0, 1000));
贴出结果

#9


结果是这样的:
如何把数据从GB2312转换成UTF-8

然后我用 echo iconv('GBK','UTF-8',file_get_contents($file['tmp_name']));return false;
得到的完全都是utf8的数据,可惜这样不是我想要的

#10


1、贴出 base64 数据
2、说一下你打算做什么

#11


把代码贴出来  看一下   简单的叙述你的需求

#12


seDC6yxDUk2x4MLrLMP7s8YsvPKzxizQ0NK1LCK/zbunwODQzaOosOzKwrSmOjEs1+7W1b/Nu6c6Miy0+sDtycw6M6OpIiwiveHL48Dg0M2jqNfu1tW/zbunOjEsveHL47/Nu6c6MizP+srbv827pzozo6kiLMv5yvS/zbunLMv51NrH+NPyLMGqz7XIyyzBqs+1yMu157uwLLXY1rcssbjXoiyxuNeiMiyxuNeiMw0KLGZnZ2csc2RmZ2ZkaGgsc2FkLM28yum53dTEwMDK0iwzLDAsZmRnZGZnLMm9tqvKoSxhc2RmZywxMzgwMDEzODAwMCxmZGhmZ2hmLGFhYSxiYmIsY2NjDQo=
我想要的就是通过fgetcsv函数循环每行记录组成数组,存入数据库 但是直接file_get_contents的话拿到的想做到这种效果比较困难,因为在cvs文件里好多个字段,有些可填有些必填。所以才那么纠结

#13


那根编码转换有什么关系
$fp = fopen('你的csv文件名', 'r');
while($row = fgetcsv($fp)) {
  $res[] = $row;
}
print_r($res);

#14


谢谢版主大大这么晚了还在帮忙解决问题 ,是这样的 ,cvs文件的编码是gb2312的,数据库编码是utf8的,然后我装进数组之前要把这里获取到的数据和库里面的做比对,来获取我要的数据,而且cvs文件里好多字段的都是汉字,所以要转码才能入库,问题是在外面file_get_contents之后转码可以进去循环里面一个一个转码就不行。

#15


不需要转码
只需在比较之前执行一次 mysql_query('set names gbk'); 就可以了

#16


版主大大  再问一个问题啊 ,那我的gbk编码的数据如何入库啊,库里面是utf8的编码,我怀疑是不是fegtcvs这个函数的作用啊 ,再里面转码就不行在外面转码就可以

#17


gbk 的数据插入到 utf8 的表,只需在插入前执行一次 mysql_query('set names gbk'); 就可以了

mysql_query(' set names gbk');
这条指令的作用是:通知 mysql 现在用 gbk 字符集进行操作
转码的工作由 mysql 自己完成

#18


恩 谢谢版主大大 ,虽然说我换了file代替了fgetcsv实现了功能