linux中fgetcsv取得的数组元素为空字符串的解决方法

使用CSV导入数据的时候,我们通常用的是Windows系统,使用GBK在Windows的Excel中编辑.

但服务器上,很多使用Linux服务器,源程序使用UTF-8,这样很容易产生字符编码的问题.

如果仅仅将CSV文件转码为UTF-8,这样在Windows服务器上没有问题,

而在RedHat5.5上,用fgetcsv取得的数组中,如果某列的内容是中文,则该列对应的数组元素为空字符串,而英文则正常.

这时,需要设置区域: 

 代码如下 复制代码

setlocale(LC_ALL, 'zh_CN.UTF-8');
代码如下

// 上传的CSV文件,通常是用Excel编辑的GBK编码,
// 而源代码是UTF-8,需要进行转码处理
file_put_contents($new_file, iconv('GBK', 'UTF-8', file_get_contents($new_file)));

//ini_set('auto_detect_line_endings', true);
// 设置区域:简体中文,UTF-8编码
setlocale(LC_ALL, 'zh_CN.UTF-8');
// 打开CSV文件
$handle = fopen($new_file, 'r');
// 取出列头
$data_heads = fgetcsv($handle);

时间: 2024-10-26 06:05:16

linux中fgetcsv取得的数组元素为空字符串的解决方法的相关文章

Linux fgetcsv取得的数组元素为空字符串的解决方法_php技巧

但服务器上,很多使用Linux服务器,源程序使用UTF-8,这样很容易产生字符编码的问题. 如果仅仅将CSV文件转码为UTF-8,这样在Windows服务器上没有问题, 而在RedHat5.5上,用fgetcsv取得的数组中,如果某列的内容是中文,则该列对应的数组元素为空字符串,而英文则正常. 这时,需要设置区域: setlocale(LC_ALL, 'zh_CN.UTF-8'); 代码如下 复制代码 代码如下: // 上传的CSV文件,通常是用Excel编辑的GBK编码, // 而源代码是UT

在Ubuntu Linux中安装XAMPP(LAMPP)服务器套件时出现错误的解决方法

怎样安装请在本博客参阅其安装. 1.在终端安装XAMPP时出现/opt/lampp/lampp: line 74: arch: command not found的错误提示 原因:未找到 解决方法: 在终端输入sudo nano /bin/arch 在弹出的编辑框界面中增加一行uname -m 保存退出 再次在终端中输入sudo chmod +x /bin/arch 问题解决 2.如果在启动warning: World-writable config file /opt/lampp/etc/my

解析dom中的children对象数组元素firstChild,lastChild的使用

以下是对dom中的children对象数组元素firstChild,lastChild的使用进行了详细的分析介绍,需要的朋友可以参考下   复制代码 代码如下: <!--children对象数组元素示例 --> <html> <body>   <table   id="tbl">     <tbody> <tr> <td> 行1列1 </td><td>行1列2 </td&g

javascript中通过索引访问数组元素的问题

问题描述 javascript中通过索引访问数组元素的问题 我想编写如下程序: 1.定义一个包含26个小写字母的数组 2.请用户输入0-25之间的自然数 3.alert对话框显示输入自然数作为索引对应的字母 代码如下: <script> //定义一个数组,包含了26个字母 var alphabet=[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z]; //用户输入0-25之间的数字,并赋值给变量i var i=prompt("请

BufferedReader中的read(数组)方法和readline()方法

问题描述 有哪位大侠能解疑一下,BufferedReader中的read(数组)方法和readline()方法在处理效率上有什么区别?两者的原理不都是用了一个数组作为缓存吗?readline方法比read(数组)方法要好在哪里?谢谢! 解决方案 解决方案二:readline一般用在文本型的内容上,以回车换行作为行分隔.read一般用在二进制内容的读取,当然,读文本型的也是可以的.

Android中findViewById获取控件返回为空问题怎么解决_Android

在Android程序中,有时候需要加载非原来activity中xml布局中的控件,来使Android程序的界面更加丰富. 我本身是在使用ViewFlipper中遇到的问题. public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); inflater=(LayoutInflater)getSystemService(LAYO

php中json_encode处理gbk与gb2312中文乱码问题的解决方法_php技巧

本文讲述了php中json_encode处理gbk与gb2312中文乱码问题的解决方法,具体方法如下: 1.json_encode()中文在gbk/gb2312中对中文返回为null $arr = array ( array ( 'catid' => '4', 'catname' => 'www.jb51.net', 'meta_title' => '' ) ); echo json_encode($arr); 运行结果: [{"catid":"4"

Android中findViewById获取控件返回为空问题怎么解决

在Android程序中,有时候需要加载非原来activity中xml布局中的控件,来使Android程序的界面更加丰富. 我本身是在使用ViewFlipper中遇到的问题. public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); inflater=(LayoutInflater)getSystemService(LAYO

Python中由于logging模块误用导致的内存泄露的解决方法

  Python中由于logging模块误用导致的内存泄露的解决方法         这篇文章主要介绍了解决Python中由于logging模块误用导致的内存泄露,针对由于过多的UDP连接所产生的问题,需要的朋友可以参考下 首先介绍下怎么发现的吧, 线上的项目日志是通过 logging 模块打到 syslog 里, 跑了一段时间后发现 syslog 的 UDP 连接超过了 8W, 没错是 8 W. 主要是 logging 模块用的不对 我们之前有这么一个需求, 就是针对每一个连接日志输出当前连接