通过 json_encode 传递日语字符(UTF-8)的问题

2024-03-28

我在通过 json_encode 将日语字符从 PHP 传输到 JavaScript 时遇到问题。

这是从 csv 文件读取的原始数据。

PRODUCT1,QA,テスト
PRODUCT2,QA,aテスト
PRODUCT3,QA,1テスト

问题是,当通过 echo json_encode($return_value) 传递这些数据时,其中 $return_value 是包含上述数据的二维数组,日语单词“テsuto”被删除并在 ajax 响应端显示为空字符串。但是,如果我在日语单词的开头放置任何字母/数字字符,例如“aテsuto”或“1テsuto”,它们是上面示例的第二行和第三行,那么这些单词就可以顺利通过。

下面是 ajax 响应端数据的样子。正如您所看到的,第一个块的第三个元素是空的。如果我从上述原始数据的其他单词中删除“a”或“1”,这些字符在响应端也会变为空。到目前为止我测试过的任何类型的日语字符都会发生这种情况。

[["PRODUCT1","QA",""],["PRODUCT2","QA","a\u30c6\u30b9\u30c8"],["PRODUCT3","QA","1\u30c6\u30b9\u30c8"]]

有谁知道为什么会发生这种情况以及我如何克服这个问题?

这是双方代码的一部分。

 PHP:
 function getFileContents($dirName,$filename){

    $return_value = array();
    $my_file= fopen($dirName . $filename, "r");

    $row = 0;
    while (($data = fgetcsv($my_file, 1000, ",")) !== FALSE) {
        $num = count($data);
         for ($c=0; $c < $num; $c++) {
            #csv file is written in euc-jp so convert to utf-8 here.
            $return_value[$row][$c] = mb_convert_encoding($data[$c], "UTF-8", "EUC-JP");
         }
         $row++;
    } 
    fclose($my_file);

    echo json_encode($return_value);
  }

  JavaScript:
  $.ajax({
     type: "POST",
     url: "data.php",
     data: { 
        "dirName" : "./data/",
        "filename" : filename
     },
     dataType :"json",
     success : function(response){
          // more code
          // At this point, Japanese characters are already empty strings.
    } 
  });

非常感谢您提前的帮助!


我发现问题是 PHP fgetcsv() 函数无法识别 EUC-JP 中的字符。显然,fgetcsv() 使用系统区域设置对字符编码进行假设 http://www.php.net/manual/en/function.fgetcsv.php#62759。我在执行 fgetcsv() 之前添加了以下行,如引用的示例所示(但以相反的方式),它解决了问题!

setlocale(LC_ALL, 'ja_JP.EUC-JP'); 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 json_encode 传递日语字符(UTF-8)的问题 的相关文章

随机推荐

  • 以编程方式旋转 UITextView

    有一个奇怪的问题 如果你创建一个UITextView创建后立即旋转它 某些线条或字符将不可见 尝试这个 myTextView font UIFont boldSystemFontOfSize 20 myTextView text Hello
  • MySQL 更新触发器 - 查找更改的列?

    我有一个有 120 列的表 我需要设置审计跟踪 如果发生更改 它将记录任何列 就像现在一样 我想我必须为每一列设置一个具有如下条件的触发器 IF NEW columnName OLD columnName THEN log the old
  • 使用正则表达式提取 r ngram

    卡尔 布罗曼的帖子 https kbroman wordpress com 2015 06 22 randomized hobbit 2 https kbroman wordpress com 2015 06 22 randomized h
  • Numpy 查找具有相同值的组的索引

    我有一个由 0 和 1 组成的 numpy 数组 y 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 1 1 我想计算 1 或 0 组的索引 因此 对于上面的示例 一组的结果应该类似于 result 0 2 8 9
  • 混合jpa继承策略-inheritanceType.JOINED与inheritanceType.SINGLE_TABLE

    我的类结构如下所示 我在这里实现了两个单独的策略 但根类的继承策略 即 InheritanceType JOINED 正在整个层次结构中使用 Entity Inheritance strategy InheritanceType JOINE
  • ORACLE 索引表上的插入性能

    为什么 Insert 语句在索引表上执行速度较慢 这实际上是同一类问题 为什么需要更多时间才能将所有杂货放在厨房的正确位置 而不是在逛完杂货店后把所有东西都留在袋子里 这是因为在存放杂货时 您希望将它们放在一个漂亮且众所周知的位置 以便以后
  • 使用 UMD 捆绑包捆绑 Angular 2 应用程序(不构建供应商捆绑包)

    我目前正在将我的 Angular 2 应用程序与 WebPack 捆绑在一起 我们仍在快速循环 因此我们不想增加构建和应用程序加载过程的延迟 而是希望包含很少变化的 Angular 2 UMD CDN 准备的捆绑包 例如
  • PySpark 输出文件数量

    我是 Spark 新手 我有一个简单的 pyspark 脚本 它读取 json 文件 将其展平并将其作为 parquet 压缩文件写入 S3 位置 读取和转换步骤运行得非常快 并使用 50 个执行器 我在 conf 中设置 但写入阶段耗时较
  • Devise::PasswordsController#create 中的 EOFError

    我在从 Ruby on Rails 应用程序发送邮件重置密码时遇到了问题 密码重置邮件过去可以使用 但现在不行了 密码重置是服务器发送的唯一电子邮件 一旦我提交了我想要获取密码的电子邮件 Rails 就会显示完整的跟踪信息 Devise P
  • 防止只读文本框在 Silverlight 中变灰

    在 Silverlight 中 如何制作文本框IsReadOnly True 不会变灰 我的应用程序的灰色效果看起来很糟糕 我想禁用它 或更改其外观 颜色 Silverlight 2 中有几个选项 最简单的是使用 TextBlock 因为它
  • NumPy:计算累积中位数

    我有大小 n 的样本 我想计算每个 i 1 sample i 在 numpy 例如 我计算了每个 i 的平均值 cummean np cumsum sample np arange 1 n 1 我可以在没有循环和理解的情况下对中位数做类似的
  • 即使没有上传输入文件,Laravel mimes 验证也总是被调用(未使用必需规则)

    我仅对文件输入字段使用单一验证规则 这就是哑剧规则 如果没有上传文件 我想跳过此规则 所以我没有使用 必需 规则 但即使没有上传文件 它也始终显示 mime 类型消息 我刚刚添加了测试所需的规则 当时它显示了所需的错误消息 仅当使用 aja
  • 从 Rails 中的单表继承获取子类的列表/数组?

    我有一大堆子类 它们通过 Rails 应用程序中的单表继承从父类继承 我想要一种方法来获取从主类继承的所有子类的数组 我尝试了在另一个 SO 答案中找到的以下单链接命令 但它只返回父类 ObjectSpace each object cla
  • 为什么

    我有一个简单的 html 页面 其中有一些样式 我不明白为什么要添加一些上边距 这是来源
  • 是否可以递归刷新 CQ5/AEM apache 调度程序中的目录?

    由于多租户情况下的特定项目 我有一个调度程序设置了相当深的统计文件级别 我希望找到一种能够递归刷新目录的方法 以模仿其他租户的更浅的统计文件级别 是否有调度程序刷新命令允许我显式删除内容目录 您可以通过向调度程序发送简单的 GET 请求来自
  • FileStream 似乎没有启用

    在我们的开发数据库之一上 我尝试启用 FileStream 我运行了下面的脚本 据说它从 0 禁用变为 2 启用 Use FileStreamTest GO EXEC sp configure filestream access level
  • 实体框架视频教程[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有免费的视频教程深入讨论 EF 而不仅仅是基础知识 Thanks 下面的视频是我看过的关于实体框架
  • 为什么DATETIME可以减整数,但DATE类型不能减

    DATETIME INTEGER 和 DATE INTEGER 的关系是否一致 这执行得很好 DECLARE Yesterday DATETIME GETDATE SELECT Yesterday 1 就像这样 DECLARE Yester
  • 如何有效地检查同一个表中的两列是否是一对一映射?

    即使不同值计数相等 也并不一定意味着一对一的映射关系 SELECT COUNT DISTINCT Column A FROM MyTable SELECT COUNT DISTINCT Column B FROM MyTable A 列 1
  • 通过 json_encode 传递日语字符(UTF-8)的问题

    我在通过 json encode 将日语字符从 PHP 传输到 JavaScript 时遇到问题 这是从 csv 文件读取的原始数据 PRODUCT1 QA PRODUCT2 QA a PRODUCT3 QA 1 问题是 当通过 echo