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 )


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

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.


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

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.


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.


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.)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.