SVN更新失败:E000022:Can';t从';UTF-8';到本机编码


SVN update failing: E000022: Can't convert string from 'UTF-8' to native encoding

当有人访问PHP页面时,我正试图从该页面运行SVN更新。我特别运行的相关PHP代码是:

echo exec("2>&1 svn update --username bing --password s3cr3t example/", $output);
echo print_r($output, true)."<br/>";

当运行此代码时,我会在浏览器中打印以下消息:

svn:E000022:/var/www/html/example/apple-touch-icon-114''195''151114-precomposed.pngArray([0]=>更新"example":1=>svn:E000022:无法将字符串从"UTF-8"转换为本机编码:[2]=>svn:E000022:/var/www/html/example/apple-touch-icon-114?''195?''151114-precomposed.png)数组([0]=>更新"example":1=>svn:E000022:无法将字符串从"UTF-8"转换为本机编码:[2]=>svn:E000022:/var/www/html/example/apple-touch-icon-114?''195?''151114-precomposed.png)

/var/www/html/example/文件夹中有一个名为apple-touch-icon-114×114-precomposed.png的文件(注意,×符号用于乘法,而不是字母x),但我将其重命名为使用字母x,并更新了存储库(它实际上完全位于一台单独的机器上)。

尽管如此,当我尝试运行这个程序时,我还是会遇到同样的错误。我搜索了这个bug,发现了一些其他问题,建议运行export LC_CTYPE=en_US.UTF-8export LC_ALL=en_US.UTF-8,但它们从来没有解释这是什么,也没有解释这些命令应该在哪里运行。我试着通过命令行运行它们,然后在上面列出的exec/print_r之前写了以下几行,所以整个事情看起来是这样的:

echo exec("2>&1 export LC_ALL=en_US.UTF-8", $output);
echo print_r($output, true)."<br/>";
echo exec("2>&1 svn update --username bing --password s3cr3t example/", $output);
echo print_r($output, true)."<br/>";

不管怎样,我仍然收到相同的错误消息,并且没有更新example目录。

有人知道我做错了什么吗?我相信这很简单,但我已经坚持了一天了。

exec每次被调用时都会打开一个新的shell。您需要创建一个批处理文件,在单个exec调用中执行这两个命令。

如果你在windows上工作,你可能仍然运气不佳,因为编码并不总是能够转换所有内容,因为标准cmd字体无法显示所有utf-8代码(你可能需要将默认字体更改为支持utf-8的字体,如Courier new)