当前位置: 首页 > 知识库问答 >
问题:

如果CSV包含日语字符,则PHP str_getcsv()无法正确解析CSV

荣轶
2023-03-14

我正在尝试使用file()函数将excel文件转换为数组。某些字段包含日文字符。对于这些字段,我没有得到正确的数据。

这是我的代码行

$data = array_map('str_getcsv', file($path));

共有2个答案

叶茂才
2023-03-14

我已经解决了这个问题

mb_convert_encoding($csv_data[$i][2],"UTF-8", "SJIS");

这将把所有Shift JIS编码字符转换为UTF-8。

蒋栋
2023-03-14

我只能猜测没有细节,比如输入的日语字母是如何被错误转换的。

str_getcsv()可以看到系统区域设置,因此设置日语区域设置可能会解决此问题。

此代码

setlocale(LC_ALL, 'ja_JP');
$data = array_map('str_getcsv', file('japanese.csv'));
var_dump($data);

在我的本地计算机上使用以下CSV文件(japanese.CSV,保存在UTF-8中)。

日本語,テスト,ファイル
2行目,CSV形式,エンコードUTF-8

结果是

array(2) {
  [0]=>
  array(3) {
    [0]=>
    string(9) "日本語"
    [1]=>
    string(9) "テスト"
    [2]=>
    string(12) "ファイル"
  }
  [1]=>
  array(3) {
    [0]=>
    string(7) "2行目"
    [1]=>
    string(9) "CSV形式"
    [2]=>
    string(20) "エンコードUTF-8"
  }
}

如您所见,str_getcsv()要求您知道输入CSV文件中使用的是哪种语言。这一次,您可以确保输入始终是日语,但如果CSV的语言不可预测,则无法对其进行解析。此外,如果您的代码在不同的环境中使用,您还需要小心,以免丢失定向区域设置。

 类似资料:
  • 问题内容: 我是Python的新手。我想解析一个csv文件,以便它可以识别带引号的值-例如 1997年,福特E350,“超级豪华卡车” 应该拆分为 (“ 1997”,“福特”,“ E350”,“超级豪华卡车”) 并不是 (“ 1997”,“福特”,“ E350”,“超级”,“豪华卡车””) 以上就是我使用类似的东西所得到的。 我该怎么做呢?同样最好将这些值存储在数组或其他数据结构中吗?因为在我从c

  • 问题内容: 我正在尝试在NetBeans 6.0.1中使用OpenCSV解析.csv文件。我的文件包含一些Unicode字符。当我在输出中写入字符时,字符以其他形式显示,例如(HJ1’-E /;)。当我在记事本中打开此文件时,它看起来还可以。 我使用的代码: 问题答案: 首先,您需要知道文件的编码格式,例如UTF-8或UTF-16。生成此文件的原因是什么? 在那之后,它相对简单- 您需要创建一个包

  • 问题内容: 我有以下代码。 如您在上面看到的,如果字符串不包含顶点,名称或透明度,我希望将其打印出来。但是我得到一个编译错误,说|| 参数类型未定义operator。我是编程的新手,所以我不确定这意味着什么,请问有人可以指出正确的方向来修复我的代码吗? 问题答案: || 运算符使用单个布尔项,而不是提供许多不同的参数。

  • 我需要解析一个逗号分隔的文本文件,其中一行可以包含一个json作为列值。该文件还包含一个标题行。 我试图构建一个正则表达式,这样我就可以解析文件并为文件的每一行和hashmap列表创建hashmap。 我意识到regex可能会过于复杂,但我不知道还能如何设计代码来获得每行的hashmap。 我尝试了不同的方法——从SO和其他网站上的例子,但无法获得良好的工作表达。它们处理不同的部分,但不处理整个数

  • 我有包含以下内容的属性文件: 我使用spring配置阅读了以下内容: 但在应用程序开始后,我看到: 我需要,因为我要使用重新启动程序:https://stackoverflow.com/a/3655963/2674303 如何避免这个错误?

  • 问题内容: 我有以下类型的字符串 我想将字符串拆分为每个逗号的数组,但仅将单引号之外的逗号分隔。 我想不出正确的正则表达式进行拆分… 会给我 但结果应该是: 有什么跨浏览器解决方案? 问题答案: 免责声明 以下答案仅适用于一种非常特定的CSV格式。正如DG在评论中正确指出的那样,此解决方案不适合RFC 4180定义的CSV,也不适合MSExcel格式。此解决方案仅演示了如何解析一个(非标准)CSV