我正在研究WebDAV implementation for PHP。为了使Windows和其他操作系统更容易协同工作,我需要跳过一些字符编码箍。
Windows在其HTTP请求中使用ISO-8859-1,而大多数其他客户端编码除ascii以外的任何UTF-8。
我的第一种方法是完全忽略这一点,但在返回网址时我很快遇到了问题。然后我认为最好将所有网址标准化。
以ü为例。这将由OS / X作为
通过线路发送u%CC%88 (this is codepoint U+0308)
Windows将其命名为:
%FC (latin1)
但是,在%FC上执行utf8_encode,我得到:
%C3%BC (this is codepoint U+00FC)
我应该将%C3%BC和u%CC%88视为同一件事吗?如果是这样..怎么样?没有触摸它似乎适用于Windows。它以某种方式理解它是一个unicode字符,但更新同一个文件会引发错误(无特殊原因)。
我很乐意提供更多信息。
答案 0 :(得分:1)
Mac将unicode字符存储为“已分解”,即“u”+¨(diaresis)而不是“ü”。 Normalizer可以照顾到这一点。如果您没有Normalizer,请尝试iconv('UTF8-MAC', 'UTF8', $str)
答案 1 :(得分:1)
我讨厌回答我自己的问题,但现在就去了。
我最终没有打扰。对各种操作系统如何编码和处理编码进行了广泛的研究。事实证明,在大多数情况下,使用其他规范化形式的其他操作系统的句柄路径都可以。虽然Windows工作有点糟糕,但它确实有用。
每当我收到一条完全不是utf8的路径时,我会尝试检测编码并将其转换为UTF-8。