上传亚马逊库存 UTF 8 编码
Posted
技术标签:
【中文标题】上传亚马逊库存 UTF 8 编码【英文标题】:Uploading Amazon Inventory UTF 8 Encoding 【发布时间】:2013-06-19 04:09:18 【问题描述】:我正在尝试将我的英语库存上传到各个欧洲亚马逊网站。我遇到的问题是,当“库存文件”上传到亚马逊时,某些不同语言的口音显示不正确。库存文件是一个制表符分隔的文本文件。
当前设置:
$type = 'text/tab-separated-values; charset=utf-8';
header('Content-Type:'.$type);
header('Content-Disposition: attachment; filename="inventory-'.$_GET['cc'].'.txt');
header('Content-Length: ' . strlen($data));
header('Content-Encoding: UTF-8');
当文本文件被输出并保存时,它看起来与在 Windows 中打开时的样子完全相同(所有字符都是正确的),但由于某种原因,亚马逊没有将其视为 UTF8 并用所有字符重新编码在这里找到:
http://www.i18nqa.com/debug/utf8-debug.html
我尝试将 BOM 添加到文件顶部,但这只会导致亚马逊出错。有其他人经历过吗?
【问题讨论】:
不知道 this document 是否仍然有效,但在第 13 页上说应该对北美和欧洲的平面文件进行编码text/tab-separated-values; charset=iso-8859-1
"我已尝试添加 BOM" 不要那样做。 BOM 仅供文本编辑器显示字符集,这是一个糟糕的主意。永远不要使用它。
请您使用以下代码提取文本的实际字节,这将显示它们实际上是 utf-8 还是其他字符集。 $resultInHex = unpack('H*', $result); $resultInHex = $resultInHex[1]; $resultSeparated = implode(', ', mb_str_split($resultInHex, 2)); echo "in hex: ".$resultSeparated;
刚刚尝试了您的提示 fvu,但它不起作用,在上传之前一切看起来都很好,所以我无法解决。我得到的十六进制值是 2
【参考方案1】:
正如@fvu 在他的评论中指出的那样,亚马逊期待的是ISO-8859-1
格式,而不是UTF-8
。这就是为什么在写入文件时应该使用 php 的 utf8_decode 方法。
【讨论】:
【参考方案2】:好的,经过大量尝试,事实证明需要对字符进行解码。我在 excel 中打开了文本文件,它们似乎将自己编码为奇怪的字符,例如 ü 使用 php utf8_decode 将它们变成正确的字符,即使文本文件将它们显示为正确的字符......非常令人困惑。
对于那些在 UTF 8 上遇到困难的人,请先尝试解码。
感谢您的帮助
【讨论】:
以上是关于上传亚马逊库存 UTF 8 编码的主要内容,如果未能解决你的问题,请参考以下文章