Bash Tool 之于 Windows Powershell 乱码一事
- 内容介绍
- 文章标签
- 相关推荐
cc这些在windows Bash Tool 调用命令 powershell时 很容易乱码
因为内置的powershell 5 是936 GBK的
一旦有中文输出或者符号什么的就会开始显示不了 这会极大的污染上下文和阻断LLM读入 提高了出错风险 比如误删库
image1920×338 111 KB
image1920×522 126 KB
以及虽然 pwsh 7 是默认UTF-8 的但是 如果 被 pwsh这样调用也没招 被git-bash套了一层,而且他很容易为了干净用 -NoProfile 来执行 这样你设置在 $PROFILE 里也无济于事
(codex的不是很清楚,但道理一样
所以我们就需要在git-bash上来预先指定一下 UTF-8
$HOME\.bashrc
# 搞定python
export PYTHONIOENCODING=utf-8
export PYTHONUTF8=1
# 搞定通过 Git Bash 管道调用时中文输出乱码问题
_ps_utf8_wrapper() {
local exe="$1"; shift
local pre_args=()
local cmd=""
local found_command=false
while [[ $# -gt 0 ]]; do
case "$1" in
-Command|-c)
found_command=true
shift
cmd="$*"
break
;;
*)
pre_args+=("$1")
shift
;;
esac
done
if $found_command && [[ -n "$cmd" ]]; then
command "$exe" "${pre_args[@]}" -Command \
"[Console]::OutputEncoding = [System.Text.Encoding]::UTF8; $cmd"
else
command "$exe" "${pre_args[@]}"
fi
}
powershell() { _ps_utf8_wrapper powershell.exe "$@"; }
pwsh() { _ps_utf8_wrapper pwsh.exe "$@"; }
之后
image1920×596 123 KB
image1920×1595 236 KB
网友解答:--【壹】--:
--【贰】--:
看不懂,但是觉得很牛
--【叁】--:
又学到了新知识
--【肆】--:
--【伍】--:
你就是win系统的神,哈雷!!!
--【陆】--:
我已经在 windows 上 all in git-bash 了,装个 fzf 感觉能有 linux 下九成的体验
--【柒】--:
这个是真的疑难杂症
--【捌】--:
--【玖】--:
学到了
之前是直接让Claude Code多写一行sys.stdout.reconfigure('utf-8')
--【拾】--:
image398×376 21.6 KB
--【拾壹】--:
你的图为何不动 因为爱吗
--【拾贰】--:
虽然没看懂咋做,但感觉很厉害!!!
--【拾叁】--:
前排点赞学习
--【拾肆】--:
是需要添加这个.bashrc文件到~目录下吗
--【拾伍】--:
已经很久没上Windows了
--【拾陆】--:
专治各种疑难杂症
--【拾柒】--:
一针见血,mark了,肯定用得到。
--【拾捌】--:
支持哈雷
--【拾玖】--:
cc这些在windows Bash Tool 调用命令 powershell时 很容易乱码
因为内置的powershell 5 是936 GBK的
一旦有中文输出或者符号什么的就会开始显示不了 这会极大的污染上下文和阻断LLM读入 提高了出错风险 比如误删库
image1920×338 111 KB
image1920×522 126 KB
以及虽然 pwsh 7 是默认UTF-8 的但是 如果 被 pwsh这样调用也没招 被git-bash套了一层,而且他很容易为了干净用 -NoProfile 来执行 这样你设置在 $PROFILE 里也无济于事
(codex的不是很清楚,但道理一样
所以我们就需要在git-bash上来预先指定一下 UTF-8
$HOME\.bashrc
# 搞定python
export PYTHONIOENCODING=utf-8
export PYTHONUTF8=1
# 搞定通过 Git Bash 管道调用时中文输出乱码问题
_ps_utf8_wrapper() {
local exe="$1"; shift
local pre_args=()
local cmd=""
local found_command=false
while [[ $# -gt 0 ]]; do
case "$1" in
-Command|-c)
found_command=true
shift
cmd="$*"
break
;;
*)
pre_args+=("$1")
shift
;;
esac
done
if $found_command && [[ -n "$cmd" ]]; then
command "$exe" "${pre_args[@]}" -Command \
"[Console]::OutputEncoding = [System.Text.Encoding]::UTF8; $cmd"
else
command "$exe" "${pre_args[@]}"
fi
}
powershell() { _ps_utf8_wrapper powershell.exe "$@"; }
pwsh() { _ps_utf8_wrapper pwsh.exe "$@"; }
之后
image1920×596 123 KB
image1920×1595 236 KB
网友解答:--【壹】--:
--【贰】--:
看不懂,但是觉得很牛
--【叁】--:
又学到了新知识
--【肆】--:
--【伍】--:
你就是win系统的神,哈雷!!!
--【陆】--:
我已经在 windows 上 all in git-bash 了,装个 fzf 感觉能有 linux 下九成的体验
--【柒】--:
这个是真的疑难杂症
--【捌】--:
--【玖】--:
学到了
之前是直接让Claude Code多写一行sys.stdout.reconfigure('utf-8')
--【拾】--:
image398×376 21.6 KB
--【拾壹】--:
你的图为何不动 因为爱吗
--【拾贰】--:
虽然没看懂咋做,但感觉很厉害!!!
--【拾叁】--:
前排点赞学习
--【拾肆】--:
是需要添加这个.bashrc文件到~目录下吗
--【拾伍】--:
已经很久没上Windows了
--【拾陆】--:
专治各种疑难杂症
--【拾柒】--:
一针见血,mark了,肯定用得到。
--【拾捌】--:
支持哈雷
--【拾玖】--:

