我正在从事一个进行大量路径名操作的项目。它在 Mac OS X 上运行良好,但令我惊讶的是,没有办法调用像 realpath 这样的函数。在 Windows 上使用 utf-8 编码的字符串。这是因为 setlocale在 Windows 上不支持 utf-8:
http://msdn.microsoft.com/en-us/library/x99tb11d.aspx
http://www.phpwact.org/php/i18n/utf-8
我可以制作调用 utf8_encode 的包装函数和 utf8_decode在内部,但是 php 中有太多的文件函数,这给我带来了很大的负担。
此外,该项目是开源的,因此当用户尝试在他们自己的代码中使用我的字符串(它们都是面向网络的 utf-8)来读/写文件时,他们可能会认为它是破坏性的。
是否有提供主要 php 文件函数的 utf-8 版本的库?我更喜欢独立的目录而不是扩展,这样我就可以将它与我的代码捆绑在一起。
我担心如果找不到这样的库,可能是 php 对我来说不适合跨平台开发的致命弱点。我也很好奇其他语言如 ruby、python 和 c++ 是如何解决这个问题的(如果有的话)。否则,这可能只是对 Windows 的又一次打击,我将不得不想出另一种解决方法。
最佳答案
Windows setlocale() 函数(不是 php,而是 actual library function)不支持多字节编码。所以你是对的,在 Windows 上设置 utf-8 语言环境是不可能的。
但是您不需要定义新函数。编写流包装器。 Stream wrappers可以被大多数与文件相关的功能使用,甚至是内部功能,例如在 XSLT 模板中加载文档。
关于在 Windows 上提供 utf-8 文件功能的 php 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19797929/