以下代码将"报告行"作为数组获取,并使用fputcsv将其转换为CSV.一切都工作得很好,除了不管我使用的字符集,它都是在文件的开头放置一个UTF-8 bom.这非常烦人,因为A)我指定iso和B)我们有很多用户使用显示UTF-8 bom作为垃圾字符的工具.
我甚至尝试将结果写入字符串,剥离UTF-8 BOM,然后回显它并仍然得到它.这个问题可能存在于Apache吗?如果我将fopen更改为本地文件,它会在没有UTF-8 BOM的情况下编写它.
header("Content-type: text/csv; charset=iso-8859-1");
header("Cache-Control: no-store, no-cache");
header("Content-Disposition: attachment; filename=\"report.csv\"");
$outstream = fopen("php://output",'w');
for($i = 0; $i < $report->rowCount; $i++) {
fputcsv($outstream, $report->getTaxMatrixLineValues($i), ',', '"');
}
fclose($outstream);
exit;
Run Code Online (Sandbox Code Playgroud) 对于我正在编写的Rich Text(RTF)到HTML/XHTML转换器,它生成UTF-8编码的HTML页面,我考虑添加包含BOM的选项.
但是,对于UTF-8编码的HTML文档,默认情况下是否禁用或启用BOM的生成?如果大多数网页都是在没有BOM的情况下交付的,我会将默认的生成器配置设置为"无BOM".
可能重复:
在python中写入utf-8文件
我有Unicode字符串(带日文字符)我想写入CSV文件.但是,BOM似乎没有正确写入,就像""第一行中的字符串一样.这导致Excel无法正确显示日文字符.使用Notepad ++打开CSV时,字符会正确显示.
fileObj = codecs.open(filename,"w",'utf-8')
fileObj.write(codecs.BOM_UTF8)
c = u';'
for s in stringsToWrite:
line = e.someUnicodeString
fileObj.write(line)
fileObj.close()
Run Code Online (Sandbox Code Playgroud) 在我的脚本中,我使用 cURL 发送数据,并启用 CURLOPT_RETURNTRANSFER。响应是 json 编码的数据。当我尝试 json_decode 时,它返回 null。然后我发现响应在字符串的开头包含 utf-8 BOM 符号 ()。
有一些实验:
$data = $data = curl_exec($ch);
echo $data;
Run Code Online (Sandbox Code Playgroud)
结果是 {"field_1":"text_1","field_2":"text_2","field_3":"text_3"}
$data = $data = curl_exec($ch);
echo mb_detect_encoding($data);
Run Code Online (Sandbox Code Playgroud)
结果 - UTF-8
$data = $data = curl_exec($ch);
echo mb_convert_encoding($data, 'UTF-8', mb_detect_encoding($data));
// identical to echo mb_convert_encoding($data, 'UTF-8', 'UTF-8');
Run Code Online (Sandbox Code Playgroud)
结果 - {"field_1":"text_1","field_2":"text_2","field_3":"text_3"}
有帮助的一件事是删除前 3 个符号:
if (substr($data, 0, 3) == pack('CCC', 239, 187, 191)) {
$data = substr($data, 3);
}
Run Code Online (Sandbox Code Playgroud)
但是,如果还有另一个 BOM 呢?所以问题是:如何检测 cURL 响应的正确编码?或者如何检测 BOM 已到?或者也许如何使用 BOM 转换响应?
使用与此处相同的项目和文本文件:Java.NullPointerException null(再次),程序正在输出数据,但带有。要将您放在图片中:
该程序是一个电话目录,忽略第一个“代码”块,而查看该链接上的第二个“代码”块,即带有条目的文本文件。程序按原样输出它们,但仅
在从文本文件读取的条目的开头给出。
关于如何删除它有帮助吗?我正在使用带文件读取器的缓冲读取器。先谢谢了。
我有一个 Twig 的奇怪问题,include它在我的 HTML 上呈现一些不可见的字符。我试过用一千种不同的方式在谷歌上搜索它,但找不到任何有类似问题的人。事实上,我什至不确定它是否与 Twig 或 Symfony 或什么有关,所以我不确定我需要寻找什么。我会试试m
在我的一个视图中的两个不同点,我使用一个for循环来li通过includeing 一个单独的 twig 文件来呈现每个点,每次都使用一组不同的参数。这两个循环是:
<ul class="search-results">
{% for entity in entities %}
{% include 'SomeBundle:Users:renderUserResults.html.twig' with {'entity':entity, 'callType':0} %}
{% endfor %}
</ul>
Run Code Online (Sandbox Code Playgroud)
和
<ul class="search-results">
{% for entity in entities %}
{% include 'SomeBundle:Users:renderUserResults.html.twig' with {'entity':entity, 'time_search':time_search, 'time_meeting_search':time_meeting_search} %}
{% endfor %}
</ul>
Run Code Online (Sandbox Code Playgroud)
的明显相关内容renderUserResults.html.twig只是:
{% set role = common.roleClass(entity.type)|trim %}
<li class="{{ role }}">
// a bunch of html
</li> …Run Code Online (Sandbox Code Playgroud) 我只是想知道是否有任何可能的方法来解决这个问题.我在工作中收到包含光纤接头拼接信息的Excel文件,当我尝试导入时,我得到一个输出错误,说第一个表与预期看到的不匹配.当我打开它时,我可以直接在这个词之前看到UTF-8的BOM Joint Name.
显然这隐藏在原始文件中,并且它导致一些手动工作必须从每个Excel文件中删除每个符号.目前我收到的文件是.csv格式,错误文件以.csv的形式返回,并显示符号.
有什么方法可以预先保存这些以删除BOM或某些东西以避免在这种情况下的手动工作?
理想情况下,我想删除隐藏的BOM,以便导入只能在没有返工的情况下第一次运行.
我需要使用PowerShell修改现有的UTF8编码的JSON文件.我尝试使用以下代码:
$fileContent = ConvertFrom-Json "$(Get-Content $filePath -Encoding UTF8)"
$fileContent.someProperty = "someValue"
$fileContent | ConvertTo-Json -Depth 999 | Out-File $filePath
Run Code Online (Sandbox Code Playgroud)
这会将BOM添加到文件中,并以UTF16格式对其进行编码.是否可以拥有ConvertFrom-Json和ConvertTo-Json不执行编码/ BOM?
传入以下JSON字符串json_decode(),它正在返回NULL.
{"total_goals":26,"total_games":17,"average_goals":"1.53"}
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
$homeJSON = file_get_contents("http://strategy-bets.com/archive/archive.php?baseurl=http://www.totalcorner.com".$Home_Team_Link);
$homeJSON = str_replace("\xEF\xBB\xBF",'',$homeJSON);
$homeJSON = rtrim($homeJSON);
$homeJSON = html_entity_decode($homeJSON);
$homeJSON = preg_replace('/\s+/', '', $homeJSON);
$clean = rtrim($homeJSON, "\x00..\x1F");
$home_decoded = json_decode($clean);
Run Code Online (Sandbox Code Playgroud)
$home_decoded还在NULL.
我正在尝试使用 PHP 解析 CSV 文件。
该文件对包含逗号的字段使用逗号作为分隔符和双引号,如:
foo,"bar, baz",foo2
Run Code Online (Sandbox Code Playgroud)
我面临的问题是我得到包含逗号分隔的字段。我得到:
"2rue du ..."而不是:2, rue du ...。
编码:
该文件似乎不是 UTF8。它在开头有奇怪的字符(显然不是 BOM,当从 ASCII 转换为 UTF8: 时看起来像这样ÿþ)并且不显示重音。
mb_detect_encoding()的CSV行返回ASCII但它无法转换:
mb_convert_encoding()转换自ASCII但返回亚洲字符自UTF-16LEiconv()返回说明:的iconv():错误的字符集,从转换UTF-16LE/ASCII到UTF8不允许。解析:
我尝试使用以下方法解析此单行(请参阅这 2 条评论)str_getcsv():
$csv = array_map('str_getcsv', file($file['tmp_name']));
Run Code Online (Sandbox Code Playgroud)
然后我尝试fgetcsv():
$f …Run Code Online (Sandbox Code Playgroud)