【问题标题】:SVN update failing: E000022: Can't convert string from 'UTF-8' to native encodingSVN 更新失败:E000022:无法将字符串从“UTF-8”转换为本机编码
【发布时间】:2015-11-12 05:15:26
【问题描述】:

当有人访问某个 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] => 更新“示例”: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 而是更新了存储库(实际上完全位于单独的机器上)。

尽管如此,当我尝试运行它时,我得到了同样的错误。我搜索了这个错误并找到了建议运行export LC_CTYPE=en_US.UTF-8export LC_ALL=en_US.UTF-8a few other questions,但他们从不解释这是什么或应该在哪里运行这些命令。我尝试通过命令行运行它们,然后在上面列出的 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 目录没有更新。

有谁知道我做错了什么?我确定这很简单,但我已经坚持了一天。

【问题讨论】:

    标签: php svn encoding utf-8


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-01-08
      • 2012-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-08
      • 2011-05-20
      • 1970-01-01
      相关资源
      最近更新 更多