Mamy projekt w Team Foundation Server (TFS), który ma nieangielski charakter (š). Podczas próby skryptu kilka rzeczy związanych z Build-my natknęliśmy się na problem - nie możemy zdać ów list do narzędzi wiersza polecenia. Wiersz polecenia lub coś innego nie wyświetla go w porządku , a narzędzie tf.exe nie może znaleźć określonego projektu.
Próbowałem różnych formatów pliku .bat (ANSI, UTF-8 z BOM i bez BOM ), a także skryptowałem go w JavaScript (który z natury jest Unicode) - ale bez powodzenia. Jak uruchomić program i przekazać mu wiersz poleceń Unicode ?
Odpowiedzi:
Moje tło: Od lat używam wejścia / wyjścia Unicode w konsoli (i robię to codziennie. Ponadto opracowuję narzędzia wsparcia dla tego zadania). Jest bardzo mało problemów, o ile rozumiesz następujące fakty / ograniczenia:
CMD
i „konsola” są niepowiązanymi czynnikami.CMD.exe
to tylko jeden z programów, które są gotowe do „pracy wewnątrz” konsoli („aplikacje konsolowe”).CMD
ma doskonałą obsługę Unicode; możesz wprowadzać / wyprowadzać wszystkie znaki Unicode, gdy dowolna strona kodowa jest aktywna.chcp 65001
jest bardzo niebezpieczny. O ile program nie został specjalnie zaprojektowany do obejścia defektów w interfejsie API systemu Windows (lub używa biblioteki wykonawczej C, która zawiera te obejścia), nie działałby niezawodnie. Win8 naprawia ½ tych problemówcp65001
, ale reszta nadal dotyczy Win10 .cp1252
. Jak już powiedziałem: Aby wprowadzić / wyprowadzić Unicode w konsoli, nie trzeba ustawiać strony kodowej .Szczegóły
File-I/O
API, aleConsole-I/O
API. (Na przykład zobacz, jak to robi Python ).U+10000
). Obsługiwane jest tylko proste renderowanie tekstu (więc języki europejskie - i niektóre wschodnioazjatyckie - powinny działać poprawnie - o ile używa się gotowych formularzy). [Jest tu drobny drobny druk dla Azji Wschodniej i znaków U + 0000, U + 0001, U + 30FB.]Względy praktyczne
Te wartości domyślne w oknie nie są bardzo pomocne. Aby uzyskać jak najlepsze wrażenia, należy dostroić 3 elementy konfiguracji:
Jeszcze jedna gotcha z „Wklejaniem” do aplikacji konsoli (bardzo techniczne):
KeyUp
zAlt
; wszystkie inne sposoby dostarczenia postaci mają miejsceKeyDown
; tak wiele aplikacji nie jest gotowych do zobaczenia postaciKeyUp
. (Dotyczy tylko aplikacji korzystających zConsole-I/O
API).Ctrl-Alt-AltGr-Kana-Shift-Gray*
), to jest on dostarczany na emulowanym naciśnięciu klawisza. Tego oczekuje każda aplikacja - więc wklejanie wszystkiego, co zawiera tylko takie znaki, jest w porządku.Wniosek : jeśli twoja klawiatura obsługuje układ wejściowy dużo znaków bez prefiksu klucze, niektóre aplikacje buggy może pominąć znaki, kiedy
Paste
za pośrednictwem interfejsu konsoli:Alt-Space E P
. ( To dlatego zaleca się używanie moich układów klawiatury!)Należy również pamiętać, że „alternatywne”, „bardziej wydajne” konsole dla Windows wcale nie są konsolami . Nie obsługują
Console-I/O
interfejsów API, więc programy korzystające z tych interfejsów API nie będą działać. (Programy, które używają tylko „interfejsów API we / wy plików do uchwytów plików konsoli” działałyby jednak dobrze).Jednym z przykładów takiej konsoli nie jest konsola MicroSoft
Powershell
. Nie używam tego; aby eksperymentować, naciśnij i puśćWinKey
, a następnie wpiszpowershell
.(Z drugiej strony istnieją programy takie jak
ConEmu
lub,ANSICON
które starają się zrobić więcej: „próbują” przechwycićConsole-I/O
interfejsy API, aby umożliwić działanie „prawdziwych aplikacji konsolowych”. To zdecydowanie działa na przykładowe programy zabawkowe; w rzeczywistości może to lub może nie rozwiązać określonych problemów. Eksperymentuj).Podsumowanie
ustaw czcionkę, układ klawiatury (i opcjonalnie zezwól na wprowadzanie HEX).
używaj tylko programów, które przechodzą przez
Console-I/O
interfejsy API i akceptują argumenty wiersza polecenia Unicode. Na przykład dowolnycygwin
skompilowany program powinien być w porządku. Jak już powiedziałem, teżCMD
jest w porządku.UPD: Początkowo, dla błędu
cp65001
, mieszałem warstwy jądra i CRTL ( UPD²: i interfejs API trybu użytkownika Windows!). Ponadto: Win8 naprawia połowę tego błędu; Wyjaśniłem sekcję dotyczącą aplikacji „lepszej konsoli” i dodałem odniesienie do tego, jak to robi Python.źródło
.log
plikach, jest to sporadyczny błąd wzip -ru
[?!]. Nie mam pojęcia, jak go debugować - lub uniknąć w przyszłości ...)Próbować:
co spowoduje zmianę strony kodowej na UTF-8. Musisz także użyć czcionek konsoli Lucida.
źródło
Miałem ten sam problem (jestem z Czech). Mam angielską instalację systemu Windows i muszę pracować z plikami na współdzielonym dysku. Ścieżki do plików zawierają znaki właściwe dla Czech.
Rozwiązaniem, które działa dla mnie jest:
W pliku wsadowym zmień stronę zestawu znaków
Mój plik wsadowy:
Plik wsadowy należy zapisać w CP 1250.
Pamiętaj, że konsola nie wyświetla poprawnie znaków, ale je zrozumie ...
źródło
á
,é
,í
,ó
, iú
.Sprawdź język dla programów nieobsługujących kodu Unicode. Jeśli masz problemy z rosyjskim w konsoli Windows, ustaw tutaj rosyjski:
źródło
cmd
, przełącza tylko domyślną stronę kodową, nacp866
którą wciąż jest 8-bitowy zestaw znaków. Używa nawetcp866
zamiast tegocp1251
dodaje swój własny kłopot.Zmiana domyślnej strony kodowej konsoli Windows jest dość trudna. Podczas wyszukiwania w Internecie można znaleźć różne propozycje, jednak niektóre z nich mogą całkowicie zepsuć system Windows, tzn. Komputer nie uruchamia się już.
Najbezpieczniejsze rozwiązanie to: Przejdź do klucza rejestru
HKEY_CURRENT_USER\Software\Microsoft\Command Processor
i dodaj wartość ciąguAutorun
=chcp 65001
.Możesz też użyć tego małego skryptu wsadowego do najpopularniejszych stron kodowych.
Użycie
@chcp 65001>nul
zamiastchcp 65001
pomija dane wyjściowe „Aktywna strona kodowa: 65001”, które otrzymujesz za każdym razem, gdy uruchamiasz nowe okno wiersza poleceń.Pełna lista wszystkich dostępnych numerów, które można uzyskać dzięki identyfikatorom stron kodowych
Uwaga: ustawienia zostaną zastosowane tylko dla bieżącego użytkownika. Jeśli chcesz ustawić go dla wszystkich użytkowników, zamień wiersz
SET ROOT_KEY="HKEY_CURRENT_USER"
naSET ROOT_KEY="HKEY_LOCAL_MACHINE"
źródło
W rzeczywistości sztuczka polega na tym, że wiersz polecenia faktycznie rozpoznaje te nieanglojęzyczne znaki, po prostu nie może ich poprawnie wyświetlić.
Kiedy wprowadzam ścieżkę w wierszu polecenia zawierającą niektóre znaki w języku innym niż angielski, jest ona wyświetlana jako „?? ?????? ?????”. Po przesłaniu polecenia (w moim przypadku cd „??? ?????? ?????”) wszystko działa zgodnie z oczekiwaniami.
źródło
.cmd
pliku wsadowego nadal muszę umieścićchcp 65001
na górze pliku wsadowego.Na komputerze z systemem Windows 10 x64 kazałem w wierszu polecenia wyświetlać znaki w języku innym niż angielski poprzez:
Otwórz wiersz polecenia z podwyższonym poziomem uprawnień (uruchom CMD.EXE jako administrator). Zapytaj rejestr o dostępne czcionki TrueType w konsoli, wykonując następujące czynności:
Zobaczysz wyjście takie jak:
Teraz musimy dodać czcionkę TrueType, która obsługuje potrzebne znaki, takie jak Courier New. Robimy to, dodając zera do nazwy ciągu, więc w tym przypadku następnym będzie „000”:
Teraz wdrażamy obsługę UTF-8:
Ustaw domyślną czcionkę na „Courier New”:
Ustaw rozmiar czcionki na 20:
Włącz szybką edycję, jeśli chcesz:
źródło
Ponieważ nie widziałem żadnych pełnych odpowiedzi dla Pythona 2.7, przedstawię dwa ważne kroki i krok opcjonalny, który jest całkiem przydatny.
Defaults
opcję. Daje to również dostęp do kolorów. Pamiętaj, że możesz również zmienić ustawienia okien poleceń wywoływanych w określony sposób (np. Otwórz tutaj, Visual Studio), wybierającProperties
zamiast tego.cp65001
, która wydaje się być próbą Microsoftu oferowania UTF-7 i UTF-8 wsparcia dla wiersza poleceń. Zrób to, uruchamiającchcp 65001
w wierszu polecenia . Po ustawieniu pozostaje tak do momentu zamknięcia okna. Musisz to zrobić ponownie przy każdym uruchomieniu cmd.exe.Aby uzyskać bardziej trwałe rozwiązanie, zapoznaj się z odpowiedzią na temat Super User. Krótko mówiąc, utwórz
REG_SZ
wpis (String) za pomocą regedit atHKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor
i nazwij goAutoRun
. Zmień jego wartość nachcp 65001
. Jeśli nie chcesz widzieć komunikatu wyjściowego z polecenia, użyj@chcp 65001>nul
zamiast niego.Niektóre programy mają problemy z interakcją z tym kodowaniem, MinGW jest godnym uwagi programem, który zawodzi podczas kompilacji z bezsensownym komunikatem o błędzie. Niemniej jednak działa to bardzo dobrze i nie powoduje błędów w większości programów.
źródło
Uważam tę metodę za przydatną w nowych wersjach systemu Windows 10:
Włącz tę funkcję: „Beta: użyj Unicode UTF-8 do obsługi języków na całym świecie”
źródło
Jedną naprawdę prostą opcją jest zainstalowanie powłoki bash dla systemu Windows, takiej jak MinGW, i użycie jej:
Jest trochę krzywej uczenia się, ponieważ będziesz musiał użyć funkcji wiersza poleceń systemu Unix, ale pokochasz jej moc i możesz ustawić zestaw znaków konsoli na UTF-8.
Oczywiście otrzymujesz również wszystkie zwykłe * gadżety * nix, takie jak grep, find, less itp.
źródło
W przypadku podobnego problemu (moim problemem było wyświetlanie znaków UTF-8 z MySQL w wierszu polecenia),
Rozwiązałem to w ten sposób:
Zmieniłem czcionkę wiersza polecenia na Lucida Console. (Ten krok musi być nieistotny dla twojej sytuacji. Ma on związek tylko z tym, co widzisz na ekranie, a nie z tym, co naprawdę jest postacią).
Zmieniłem stronę kodową na Windows-1253. Robisz to w wierszu polecenia, „chcp 1253”. Sprawdziło się w moim przypadku, w którym chciałem zobaczyć UTF-8.
źródło
Ten problem jest dość denerwujący. Zwykle w nazwie pliku i treści pliku mam chiński znak. Pamiętaj, że korzystam z systemu Windows 10, oto moje rozwiązanie:
Aby wyświetlić nazwę pliku , na przykład
dir
lubls
jeśli zainstalowałeś Ubuntu bash na Windows 10Ustaw region tak, aby obsługiwał znak inny niż utf 8.
Następnie czcionka konsoli zostanie zmieniona na czcionkę tego ustawienia narodowego, a także zmieni kodowanie konsoli.
Po wykonaniu poprzednich kroków, aby wyświetlić zawartość pliku UTF-8 za pomocą narzędzia wiersza polecenia
chcp 65001
type
polecenia, aby zajrzeć do zawartości pliku lubcat
jeśli zainstalowałeś Ubuntu bash na Windows 10Najbardziej leniwe rozwiązanie: wystarczy użyć emulatora konsoli, takiego jak http://cmder.net/
źródło
point
polecenia są nadal zniekształcone.Widzę tu kilka odpowiedzi, ale wydaje się, że nie odpowiadają na pytanie - użytkownik chce uzyskać dane wejściowe Unicode z wiersza poleceń.
Windows używa UTF-16 do kodowania w dwóch ciągach bajtów, więc musisz pobrać je z systemu operacyjnego w swoim programie. Można to zrobić na dwa sposoby -
1) Microsoft ma rozszerzenie, które pozwala main przyjmować szeroką tablicę znaków: int wmain (int argc, wchar_t * argv []); https://msdn.microsoft.com/en-us/library/6wd819wh.aspx
2) Wywołaj interfejs Windows, aby uzyskać wersję Unicode wiersza poleceń wchar_t win_argv = (wchar_t ) CommandLineToArgvW (GetCommandLineW () i & nargs); https://docs.microsoft.com/en-us/windows/desktop/api/shellapi/nf-shellapi-commandlinetoargvw
Przeczytaj to: http://utf8everywhere.org, aby uzyskać szczegółowe informacje, szczególnie jeśli wspierasz inne systemy operacyjne.
źródło
Od czerwca 2019 r. W systemie Windows 10 nie będziesz musiał zmieniać strony kodowej.
Zobacz „ Przedstawiamy Windows Terminal ” (od Kayla Cinnamon ) i Microsoft / Terminal .
Dzięki zastosowaniu czcionki Consolas zapewniona będzie częściowa obsługa Unicode.
Jak udokumentowano w
Microsoft/Terminal
numerze 387 :źródło
Szybka decyzja dla plików .bat, jeśli komputer wyświetla poprawną ścieżkę / nazwę pliku podczas pisania w oknie DOS:
W ten sposób tworzysz plik .txt - temp.txt. Otwórz go w Notatniku, skopiuj tekst (nie martw się, będzie wyglądał nieczytelnie) i wklej go do pliku .bat. Wykonanie .bat utworzonego w ten sposób w DOS-window działało dla mnie (cyrylica, bułgarski).
źródło
Lepsza czystsza rzecz: po prostu zainstaluj dostępny, bezpłatny pakiet językowy Microsoft japoński. (Inne pakiety języków orientalnych również będą działać, ale przetestowałem japoński).
To daje czcionki z większymi zestawami glifów, sprawia, że są domyślnym zachowaniem, zmienia różne narzędzia Windows, takie jak cmd, WordPad itp.
źródło
Zmiana strony kodowej na 1252 działa dla mnie. Problemem jest dla mnie to, że symbol podwójnej lalki § jest konwertowany na inny symbol przez DOS w systemie Windows Server 2008.
Użyłem CHCP 1252 i czapki przed nim w moim oświadczeniu BCP ^ §.
źródło
Rozwiązałem podobny problem polegający na usuwaniu plików o nazwie Unicode, odwołując się do nich w pliku wsadowym ich krótkimi nazwami (8 kropek 3).
Krótkie nazwy można przeglądać wykonując
dir /x
. Oczywiście działa to tylko z nazwami plików Unicode, które są już znane.źródło