Zmień domyślną stronę kodową konsoli Windows na UTF-8

123

Obecnie korzystam z systemu Windows 7 x64 i zwykle chcę, aby wszystkie narzędzia konsoli działały z UTF-8, a nie z domyślną stroną kodową 850.

Uruchamianie chcp 65001w wierszu polecenia przed użyciem jakichkolwiek narzędzi pomaga, ale czy można ustawić domyślną stronę kodową?

Aktualizacja:

Zmiana wyświetlanej HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCPwartości, aby 65001system nie mógł się uruchomić w moim przypadku.

Proponowana zmiana na HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorundobrze @chcp 65001>nulsłużyła do moich celów. (dzięki Ole_Brun )

Regent
źródło
Zwróć uwagę, że celowe rozwiązanie może zepsuć system Windows „find.exe (co spowodowałoby problemy z kompilacją zestawu SDK systemu Android): superuser.com/questions/176737/…
J Rao
Hm, kiedy używam chcp 65001, okna konsoli ulegają awarii, gdy robię katalog, ale pomaga po prostu uruchomić cmd.exe z flagą / u (nb: używa Unicode, ponieważ nie jest odzwierciedlone w wynikach chcp.com)
eckes
10
Konsola Windows jest pełna błędów, gdy kodowanie jest ustawione na nieobsługiwaną wielobajtową stronę kodową, taką jak 65001. Każde oprogramowanie korzystające z danych wyjściowych interfejsów API Win32 WriteFile / ReadFile uzyska nieprawidłowe wyniki, w wyniku czego będzie można zbudować coś takiego, jak MSVCRT implementacja stdlib wytworzy zniekształcone / powtarzane wyjście i zawiesi się na wejściu, gdy zostanie skonfrontowane z non-ASCII. Dopóki MS nie zajmie się jego naprawą - i minęły dziesięciolecia bez śladu takiego zdarzenia - globalna zmiana strony kodowej konsoli na 65001 jest wyjątkowo złym pomysłem .
bobince
2
Każde użycie Awersji funkcji Windows jest zepsute. Cały kod musi być przeniesiony, aby móc korzystać z Wwersji.
Demi
1
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCPjest używany jako rezerwowy w środowiskach innych niż Unicode (non-utf), oczywiście próbujesz zmusić go do „Unicode”, ponieważ z definicji jest to kontrowersyjne. Windows zawiesza się prawdopodobnie dlatego, że niektóre elementy systemu podczas uruchamiania zależą od zestawu znaków innego niż Unicode.
venimus

Odpowiedzi:

99

Aby zmienić stronę kodową tylko dla konsoli, wykonaj następujące czynności:

  1. Start -> Uruchom -> regedit
  2. Iść do [HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorun]
  3. Zmień wartość na chcp 65001
Nils Magne Lunde
źródło
1
@Regent W pytaniu wspomniana wartość rejestru, która działała dla Ciebie, brzmi: @chcp 65001>nulw tej zaakceptowanej odpowiedzi tak jest chcp 65001. Jakie są różnice między nimi?
galacticninja
7
@galacticninja po prostu umieszczenie chcp 65001spowoduje, że każdy otwarty wiersz polecenia wydrukuje „Aktywny kod strony: 65001”, a jednocześnie @chcp 65001>nuluniemożliwi wyjście.
Regent
7
Autorunnie jest dla mnie obecny w systemie Windows 8.1.
kleinfreund
2
@kleinfreund @Luke: jeśli Autorunnie jest obecny, możesz dodać nową wartość ciągu z zawartością@chcp 65001>nul
Dacto
1
@ Dr.jacky Nie jestem pewien, co dokładnie oznaczają przez niebezpieczne. Właśnie odpowiedziałem na pytanie PO. To, czy powinieneś to zrobić, czy nie, to inne pytanie. Uważam, że mogą występować pewne problemy z Pythonem, więc możesz to sprawdzić przed ustawieniem strony kodowej przynajmniej na 65001.
Nils Magne Lunde,
38

Osobiście nie lubię zmieniać rejestru. Może to powodować wiele problemów. Utworzyłem plik wsadowy:

@ECHO OFF
REM change CHCP to UTF-8
CHCP 65001
CLS

I zapisywane na C:\Windows\System32jak switch.bat.

Utworzyłem link do cmd.exe na pulpicie.

We właściwościach skrótu cmd zmieniono miejsce docelowe na: C:\Windows\System32\cmd.exe /k switch

Voilá, kiedy muszę wpisać UTF-8, używam tego linku.

juca
źródło
7
Zauważ, że zostanie wydrukowane Active code page: 65001na standardowe wyjście. Więc jeśli robisz coś takiego CHCP 65001 && mycommand.exe, na początku wydrukujesz stronę kodową. MusiszCHCP 65001 >nul && mycommand.exe
frumbert,
32

Plik reg:

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe]
"CodePage"=dword:fde9
  1. Wartość musi być szesnastkowa
  2. Górna linia musi być podana dokładnie tak, jak jest
  3. HKEY_CURRENT_USER nie może być skracany
  4. dword nie można pominąć

Wiersz polecenia:

REG ADD HKCU\Console\%SystemRoot^%_system32_cmd.exe /v CodePage /t REG_DWORD /d 65001
  1. Wartość może być w dec lub hex
  2. % SystemRoot% musi być poprzedzony znakiem ucieczki
  3. REG_DWORD nie można pominąć

PowerShell:

New-Item -ErrorAction Ignore HKCU:\Console\%SystemRoot%_system32_cmd.exe
Set-ItemProperty HKCU:\Console\%SystemRoot%_system32_cmd.exe CodePage 65001
  1. Wartość może być w dec lub hex
  2. -Type DWord zakłada się z PowerShell 3+
  3. Można użyć ni -> New-Item
  4. Można użyć sp -> Set-ItemProperty
  5. Można użyć -ea 0 -> -ErrorAction Ignore

Cygwin:

regtool add '\HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe'
regtool set '\HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe\CodePage' 65001
  1. Wartość może być w dec lub hex
  2. Można użyć / -> \
  3. Można użyć HKCU -> HKEY_CURRENT_USER
  4. Można użyć user -> HKEY_CURRENT_USER
Steven Penny
źródło
Nie działał w systemie Windows 10. Co działa, to utworzyć autorun, który ustawia stronę kodową za pomocą polecenia chcp.Eg,
George
To, co chciałem powiedzieć przed nieoczekiwanym przekroczeniem limitu czasu edycji, to problem chcp 65001w pliku polecenia autorun. Zobacz stackoverflow.com/a/17405182/315083
George
Chodzi o to, że działa tylko dla CMD, ale nie dla samej konsoli.
AnrDaemon
5

Poleceniem zmiany strony kodowej jest chcp <codepage>. Przykład: chcp 1252. Powinieneś wpisać go w oknie PowerShell. Aby uniknąć kłopotów z wpisywaniem go za każdym razem (jeśli zawsze musisz zmienić stronę kodową), możesz dołączyć ją do wiersza poleceń programu. Aby to zrobić, wykonaj następujące kroki:

  1. Kliknij prawym przyciskiem myszy ikonę PowerShell w menu Start i wybierz „Więcej”> „Otwórz lokalizację pliku”.
  2. Kliknij prawym przyciskiem myszy skrót PowerShell i wybierz „Właściwości”.
  3. Dodaj następujący tekst na końcu wiersza polecenia „Cel”: -NoExit -Command "chcp 1252"

Bądź szczęśliwy. Nie przejmuj się rejestrem Windows, chyba że nie masz innej opcji.

JColares
źródło
Ten działał dla mnie idealnie. -NoExit -Command "chcp 1252 > null"na początku pomija również komunikat o wybranej stronie kodowej.
CodeMonkey,
5

Można to zrobić, tworząc profil PowerShell i dodając do niego polecenie „chcp 65001> $ null”:

PS> Set-ExecutionPolicy RemoteSigned
PS> New-Item -Path $Profile -ItemType file -Force
PS> notepad $Profile

Nie wymaga to edycji rejestru i, w przeciwieństwie do edycji skrótu, będzie działać, jeśli program PowerShell zostanie uruchomiony w określonym folderze za pomocą menu kontekstowego Eksploratora Windows.

Freon Sandoz
źródło
1
@PimpJuiceIT, nie .. patrz pierwszy wiersz tej odpowiedzi.
Dacto
4

W wersji systemu Windows 10 z 1809 roku udało mi się na stałe rozwiązać ten problem, przechodząc do systemu Language settings, wybierając Administrative language settings, klikając Change system locale...i zaznaczając Beta: Use Unicode UTF-8 for worldwide language supportpole, a następnie ponownie uruchamiając komputer.

W ten sposób dotyczy wszystkich aplikacji, nawet tych, których nie uruchamiam z wiersza poleceń!
(Co było dla mnie konieczne, ponieważ próbowałem edytować kod Agda z Atomu.)

Isti115
źródło