TP CLI 模式下Linux或Unix系统命令行错误提示中文乱码问题 (已被官方收录)

Thinkphp3.2.2版本中,当运行TP在Cli模式下,发生错误,而错误提示消息中的中文显示为乱码。个人觉得这应该是Thinkphp的一个bug。
追踪Bug到源代码:
在/ThinkPHP/Library/Think/Think.class.php 第300行:
源码:

exit(iconv('UTF-8','gbk',$e['message']).PHP_EOL.'FILE: '.$e['file'].'('.$e['line'].')'.PHP_EOL.$e['trace']);

这就意味着在任何情况下都会将错误消息转换成GBK编码,而UNIX|Linux下的命令行编码是UTF-8。这样就导致了乱码

修复方式:

exit((strtoupper(substr(PHP_OS, 0, 3)) === 'WIN' ? iconv('UTF-8','gbk',$e['message']) : $e['message']).PHP_EOL.'FILE: '.$e['file'].'('.$e['line'].')'.PHP_EOL.$e['trace']);

做一个简单的系统判断,判断是WIN或非WIN系统,来做字符集的转换