我正在使用php fwrite()创建一个文件,我知道我的所有数据都是UTF8(我已经对此进行了大量测试 - 将数据保存到数据库并在普通网页上输出所有工作正常并报告为utf8.)但是我我被告知我输出的文件包含非utf8数据:(在bash(CentOS)中是否有命令检查文件的格式?
使用vim时,它将内容显示为:
Don~~~~你做什么...... It~~~~是一个很棒的网站...... We ~~ Yve刚刚推出/
任何帮助将不胜感激:确认文件是UTF8或如何将utf8内容写入文件.
UPDATE
为了澄清我如何知道我有UTF8数据,我做了以下事情:
到数据库我先运行它:
$enc = mb_detect_encoding($data);
$data = mb_convert_encoding($data, "UTF-8", $enc);
就在我运行fwrite之前,我已经检查了数据注意每个数据返回'IS utf-8'
if (strlen($data)==mb_strlen($data, 'UTF-8')) print 'NOT UTF-8';
else print 'IS utf-8';
谢谢!
我在导出带有中文字符的 UTF-8 CSV 时遇到了困难,在 Windows Excel 上显示乱码。我正在使用 PHP,并且已经添加了 BOM 字节标记并尝试了编码,但根本没有运气。
它们在 Notepad++、Google Spreadsheet 甚至 Mac Numbers 上都可以正常打开。但 Excel 上不行,这是客户的要求。使用 Notepad++ 打开时,编码显示为 UTF-8。如果我手动将其更改为 UTF-8 并保存,该文件在 Excel 上可以正常打开。
似乎 BOM 字节标记没有保存在输出中,因为 Notepad++ 总是将其检测为没有 BOM 的 UTF-8。
此外,CSV 不会保存在服务器上。数据从DB中检索,然后直接导出。
这是我的代码:
// Setup headers
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Description: File Transfer');
header("Content-type: text/csv");
header("Content-disposition: filename=".$filename.".csv");
header("Pragma: no-cache");
// First Method
$fp = fopen('php://output', 'w');
// Add BOM to fix UTF-8 in Excel, but doesn't work
fputs($fp, chr(0xEF) . chr(0xBB) . chr(0xBF) );
if ($fp) …Run Code Online (Sandbox Code Playgroud)