為什麼 Windows DIR 指令會產生 ???字符而不是俄語字母?

為什麼 Windows DIR 指令會產生 ???字符而不是俄語字母?

在 Windows 10 機器上,我透過命令列執行以下命令:
C:\Users\idiot\Music>dir /a:d /s /b >> tom-music-2016-july.txt

目的是列出所有目錄。但我注意到名稱中包含非羅馬字母的目錄將打印 ??????而不是俄語或中文字符。為什麼?

最初我認為問題出在系統字體。 (我沒有安裝俄語語言套件)。但我可以在 Win 資源管理器中將檔案重新命名為俄語檔案名稱。重要的是,當我在視窗中運行 DIR 命令(不將其通過管道傳輸到輸出檔案)時,我可以清楚地看到俄語字符

對我來說,這意味著問題要么出在將某些內容傳輸到文件的命令上,要么出在試圖讀取輸出的 Windows 文字編輯器上。

我嘗試在 2 個單獨的文字編輯器甚至網頁瀏覽器中開啟該文件,但無論如何我都看到問號字元。

有人可以提出這個問題的原因和可能的解決方案嗎?

我是否正確地假設我不需要對文件或目錄本身進行任何處理?謝謝。

後記:我特別困惑為什麼俄語字元在控制台視窗中渲染得很好,但當它通過管道傳輸到文件時,我看到問號。

答案1

>沒什麼秘密:使用重定向建立的檔案的編碼遵循cmd.?如果字元不存在於這樣的代碼頁中,則(問號)只是替換(替換標記)。

解決方案:使用UTF-8(代碼頁65001)作為chcp 65001

以下範例說明了(也許證明)很好:

d:\bat\UnASCII Names> chcp 1250
Active code page: 1250

d:\bat\UnASCII Names> dir /b /AD >dir1250.txt

d:\bat\UnASCII Names> chcp 65001
Active code page: 65001

d:\bat\UnASCII Names> dir /b /AD >dir65001.txt

在Notepad++中開啟的dir1250.txt和檔案:dir65001.txt

重定向和編碼

請注意所謂的ANSI我的語言環境中的代碼頁是 1250(中歐),而您的語言環境可能是 1252(美國和西歐)...

相關內容