php - Laravel 7 - 解析和导入带有欧元符号的 CSV
问题描述
晚上好,我尝试了我在互联网上找到的所有代码来解决这个愚蠢的问题......我希望你有一个解决方案。
我有一个 CSV 文件,其中包含一个包含 €(欧元)符号的字段。
基于Notepad++,文件编码为ANSI。
我需要解析它并将其以 json 格式导入数据库。
$path = $request->file('csv_file')->getRealPath();
$delimiter = ';';
$data = array_map(function($str) use ($delimiter) {
return str_getcsv($str, $delimiter);
}, file($path));
... some stuff ....
$csvDataFile = CsvData::create([
'csv_filename' => $request->file('csv_file')->getClientOriginalName(),
'csv_header' => $request->has('header'),
'csv_data' => json_encode(array_slice($data,1)),
'csv_info' => json_encode($request->csv_info),
]);
DB 上的 csv_data 字段为 0,因为 € 符号破坏了 json_encode 函数。
我试图用空字符替换它:preg_replace('/\x{20AC}/u', '', $line);
逐行扫描数组,但 € 符号不再相同(既不是 €,也不是 \x20AC )。
我还尝试使用 `fgets 将整个文件作为字符串读取,并在那里替换 € 符号,但它没有明确存在。
我终于尝试了这里报告的解决方案fgetcsv() 丢弃带有变音符号的字符(即非 ASCII) - 如何解决?...但它似乎不起作用。
有什么聪明的解决方案吗?
谢谢!
解决方案
推荐阅读
- java - JavaFX 获取 StackPane 的样式表变量/背景颜色
- c# - log4net 不输出任何内容
- python - 如何使用 python 列出我的 azure 帐户中的所有资源组?
- tensorflow - 为什么我的电脑没有检测到 GPU 和使用 CPU?
- c# - 如何在 LINQ 中组合对象属性中的列表?
- python - 计算两个日期之间的差异,不包括python中的周末?
- python - 使用 print(x for x in list) 打印意外结果?
- python - Python在linux中运行时找不到模块
- sql-server - 从 TFS 管理控制台连接到 SQL 实例会引发连接错误?
- c++ - 类似数值类型的模板冲突