【发布时间】:2018-08-11 03:09:00
【问题描述】:
我正在尝试使用 Laravel 的存储外观将文本文件保存为 UTF-8。不幸的是找不到方法,它保存为us-ascii。如何保存为 UTF-8?
目前我正在使用以下代码来保存文件;
Storage::disk('public')->put('files/test.txt", $fileData);
【问题讨论】:
我正在尝试使用 Laravel 的存储外观将文本文件保存为 UTF-8。不幸的是找不到方法,它保存为us-ascii。如何保存为 UTF-8?
目前我正在使用以下代码来保存文件;
Storage::disk('public')->put('files/test.txt", $fileData);
【问题讨论】:
我建议改用mb_convert_encoding
$fileData = mb_convert_encoding($fileData, "UTF-8", "auto");
Storage::disk('public')->put('files/test.txt", $fileData);
【讨论】:
ASCII 是 UTF-8 的一个子集,因此所有 ASCII 文件都已经 UTF-8 编码。 ASCII 文件中的字节和“将其编码为 UTF-8”产生的字节将是完全相同的字节。它们之间没有区别,因此无需做任何事情。
看起来您的问题是文件实际上不是 ASCII。您需要确定他们使用的编码,并正确转码。
【讨论】:
您应该能够将“\xEF\xBB\xBF”(将其定义为 UTF-8 的 BOM)附加到您的 $fileData。所以:
Storage::disk('public')->put('files/test.txt", "\xEF\xBB\xBF" . $fileData);
还有其他方法可以在将文本写入文件之前对其进行转换,但这是最简单、最容易阅读和执行的方法。据我所知,Illuminate\Filesystem\Filesystem内部也没有字符编码方法。
欲了解更多信息:https://stackoverflow.com/a/9047876/823549 和 What's different between UTF-8 and UTF-8 without BOM?。
【讨论】: