解決Git 中文亂碼- Windows Powershell - HackMD
文章推薦指數: 80 %
預設使用UTF-8 編碼. 根據Stackoverflow 上所提到的,先來確認 [console]::OutputEncoding 、 ...
Published
LinkedwithGitHub
Like
Bookmark
Subscribe
---
title:WindowsPowershell|解決Git中文亂碼
date:2022-07-10
is_modified:false
disqus:cynthiahackmd
image:https://i.imgur.com/kzQg3NE.png
categories:
-"資訊科技›開發與輔助工具"
tags:
-"資訊科技›開發與輔助工具"
-Windows/DOS
-工具安裝與部署
-Git
-終端機
-"Published"
---
#WindowsPowershell|解決Git中文亂碼
######tags:|`資訊科技›開發與輔助工具`|`Windows/DOS``工具安裝與部署``Git``終端機`|`Published`
{%hackmd@CynthiaChuang/Github-Page-Theme%}
最近用Windows10工作的時間比較多,因為被關在家咩。
自從上次安裝[WSL](https://hackmd.io/@CynthiaChuang/WSL-Install-and-Use-the-Ubuntu-subsystem-in-Win10/)時使用了PowerShell後,發現它可在Windows上下些常用的Linux的指令、基本可以滿足我的基本需求後,我幾乎放棄了Windows的命令提示字元。
但它有個麻煩的問題...雖然開發過程中少有用到中文,但像是我在寫網誌的時候就會用到,此時就會發現中文變成了亂碼...:cry:
不是我要說...,但diff長這樣是要我通靈喔!
看起來應該是編碼問題?觀察下一個字元對應到了三個編碼,感覺像是UTF-8的儲存格式,但直接沒有轉換顯示,直接就用印出來了?
不過,我如果用cat來看內文的話,一切正常:
推測兩個可能原因: 1.終端機的編碼設定 2.git的問題 第二點我不太確定,因為我在Linux上時不需要這種設定,可能需要更多的嘗試來確認問題。
所以我決定先來調整終端機的編碼設定,如果失敗了,再來研究git這邊。
##預設使用UTF-8編碼 根據[Stackoverflow](https://stackoverflow.com/questions/57131654/using-utf-8-encoding-chcp-65001-in-command-prompt-windows-powershell-window)上所提到的,先來確認`[console]::OutputEncoding`、`[console]::InputEncoding`、`$OutputEncoding`這三個變數:
可以發現`[console]::OutputEncoding`、`[console]::InputEncoding`兩個變數的顯示是使用Big5:
兩個跟Output相關的編碼,一個呈現Big5、一個用UTF-8,所以現在是歸誰管?
最後還是決定先繼續往下做,先把==所有編碼都改成UTF-8再說==。
所以接下來先來查查,個人設定檔的配置路徑,這個值可以藉由`$PROFILE`變數得知:
完成後啟動一個新的視窗,理論上預設編碼就都會呈現UTF-8了。
題外話,那天跟同事討論了**踩坑排行榜**,雖然我不像前面兩位同事是踩坑專業戶,該踩得、不該踩得坑全都一個不落;但該掉的坑我似乎也沒有幸運躲過,你看這不就來一個錯誤訊息了嗎? 在我修改完個人設定檔後,重啟PowerShell時跳出了下列錯誤訊息:
查了下原因,發現是因為是Windows執行安全性設置所導致的,在PowerShell預設的執行原則是**Restricted**,也就是限制原則,它**阻止所有script的運行**,包含剛剛的PowerShell配置文件(.ps1)。
這邊我們把執行原則上調到==RemoteSigned==,它可以**不需要簽署就執行在本機所撰寫的script**,但若是從下載的script就必須經過簽署後才可執行。
喔,對了`Set-ExecutionPolicy`這條指令的執行,必須具備**系統管理員身份**。
所以我又重起了一個以系統管理員身份執行的PowerShell,並按`A`同意變更執行原則:
修改完成後,再次看看diff結果,結果仍然是亂碼:cry:
不過好像GitforWindows內建的git.exe工具,是走UNIX-like作業系統環境下,所以非英語系語言的文字要另外設定。
這點git可以直接透過指令將編碼調整成UTF-8 ```bash= #encodingofstatusoutput $gitconfig--globalcore.quotepathfalse #GUIencoding $gitconfig--globalgui.encodingutf-8 #encodingofcommitmessages $gitconfig--globali18n.commit.encodingutf-8 #encodingoflogoutputs $gitconfig--globali18n.logoutputencodingutf-8 ```
這時看看status,可以正常顯示檔名了:
直接在最後加上 ```bash= $env:LESSCHARSET='utf-8' ``` 最後再試試看指令,終於能正常呈現了:
是說,如果是設定git指令可以解掉大半,那麼在命令提示字元上效果應該也是可行的?果不其然,在命令提示字元上,status已經正常顯示,而log、diff跟使用者名稱則還是亂碼。
因此這個時候,僅需設定命令提示字元上的`LESSCHARSET`即可。
命令提示字元的變數的話,就要去改**登錄編輯程式**,這可以直接從搜尋欄輸入**regedit**叫出。
然後依序尋找`HKEY_LOCAL_MACHINE`>`Software`>`Microsoft`>`CommandProcesso`,並新增變數:
```bash= $SETLC_ALL=C.UTF-8 ``` 如果要每次啟動都生效的話,就改用: ```bash= $SETXLC_ALLC.UTF-8 ```
完成後,就可以看到顯靈結果啦!再也不用通靈看diff了:
[[Windows]程式設計教學:使用PowerShell](https://opensourcedoc.com/windows-programming/powershell/)。
檢自開源技術教學網(2022-06-24)。
2.協同撰寫。
[PowerShell](https://zh.wikipedia.org/wiki/PowerShell)。
檢自維基百科(2022-06-24)。
3.NeilTsai(2020-02-21)。
[CommandPrompt/WindowsPowershell預設使用UTF-8編碼(Windows10)](https://www.thinkinmd.com/post/2020/02/21/command-prompt-and-windows-powershell-default-use-utf-8/)。
檢自ThinkinMarkdown(2022-06-24)。
4.Ray(2021-01-06)。
[解決Windows上輸入指令出現「因為這個系統上已停用指令碼執行,所以無法載入...」的問題](https://israynotarray.com/other/20200510/1067127387/)。
檢自是Ray不是Array(2022-06-24)。
5.sysin(2021-11-21)。
[Windows10环境变量:通过CMD和PowerShell写入环境变量](https://sysin.org/blog/windows-env/)。
檢自SYStemINside(2022-06-24)。
6.(2021-11-21)。
[SettingtheEncodingonWindows](https://support.huaweicloud.com/intl/en-us/usermanual-codehub/devcloud_hlp_0954.html)。
檢自HUAWEICLOUD(2022-06-24)。
##更新紀錄 :::spoiler最後更新日期:2022-07-10 -2022-07-10發布 -2022-07-10完稿 -2022-06-24起稿 :::
>**本文作者**:辛西亞.Cynthia >**本文連結**:[辛西亞的技能樹](https://cynthiachuang.github.io/Solve-that-Mandarin-Characters-Will-Be-Garbled-When-Using-Git-Command-in-Powershell/)/[hackmd版本](https://hackmd.io/@CynthiaChuang/Solve-that-Mandarin-Characters-Will-Be-Garbled-When-Using-Git-Command-in-Powershell) >**版權聲明**:部落格中所有文章,均採用[姓名標示-非商業性-相同方式分享4.0國際](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en)(CCBY-NC-SA4.0)許可協議。
轉載請標明作者、連結與出處! × Signin Email Password Forgotpassword or Byclickingbelow,youagreetoourtermsofservice. SigninviaFacebook SigninviaTwitter SigninviaGitHub SigninviaDropbox NewtoHackMD?Signup
延伸文章資訊
- 1分享幾個在Windows 與Linux 常見的編碼問題與解決方案
看到上述這麼多支援的編碼不同,而跙Windows PowerShell 5.1 以前的版本竟然沒辦法指定UTF8 (No BOM) 的輸出,實在母湯!👎.
- 2PowerShell 中的UTF-8 編碼(CHCP 65001) | D棧- Delft Stack
創建時間: May-16, 2022. PowerShell 中的Unicode; 在Windows PowerShell 中更改系統區域設定以使用 UTF-8 編碼; 在 $PSDefault...
- 3關於字元編碼- PowerShell - Microsoft Learn
如果您需要在腳本中使用非Ascii 字元,請使用BOM 將它們儲存為UTF-8。 如果沒有BOM,Windows PowerShell將腳本誤譯為在舊版「ANSI」 字碼頁中編碼。
- 4如何寫批次檔自動big5 轉utf-8 檔案格式 - iT 邦幫忙
譬如設定好 SourcePath: D:\1 DestinationPath: D:\2. Encoding:utf8. 執行完結果就產出在D:\2. 小弟完全沒寫過powershell 有試著...
- 5解決Git 中文亂碼- Windows Powershell - HackMD
預設使用UTF-8 編碼. 根據Stackoverflow 上所提到的,先來確認 [console]::OutputEncoding 、 ...