Znaki UTF8 w terminalu bash Windows 10

36

Zainstalowałem nową powłokę bash na Windows 10. Używam jej razem z ZSH. Jednak żaden z znaków utf8 nie działa, pojawiają się jako kwadratowe bloki. Jak włączyć kodowanie znaków utf8 w powłoce jako domyślne? Czy to jest możliwe?

Ortix92
źródło
5
Jeśli każdy znak pojawia się jako jeden kwadrat, oznacza to, że UTF-8 już działa; to czcionka pozbawiona obsługi Unicode.
grawity
użyj, chcp 65001aby zmienić stronę kodową na UTF-8 i zmienić czcionkę na Consolas
phuclv
Przełączyłem się na SimSun-Ext Bczcionkę i wszystkie znaki są wyświetlane poprawnie.
Ryan Foley,
5
@grawity Korzystałem z mono uubntu i teraz przełączyłem się na konsole. Zamiast pustego kwadratowego pudełka dostaję kwadratowe pudełko ze znakiem zapytania w środku. Próbowałem też sugestii chcp, ale po sprawdzeniu właściwości jest już ustawione kodowanie UTF-8.
Ortix92,
2
Chciałbym zauważyć, że ten problem nadal nie został rozwiązany i że nadal nie mogę poprawnie wyświetlać znaków Unicode utf8 przy użyciu ZSH
Ortix92,

Odpowiedzi:

12

Kliknij prawym przyciskiem myszy pasek tytułu u góry okna bash, wybierz właściwości wpisu. W oknie otwierającym znajduje się zakładka, w której możesz zmienić czcionkę. Zmieniłem czcionkę na „Source Code Pro” i rozmiar 14.

Wygląda dobrze i wszystkie znaki utf-8 działają.

Doktor
źródło
To prawdziwa odpowiedź. Możesz wybrać czcionkę, która Ci się podoba, która obsługuje UTF8. Zainstalowałem Menlo, a potem zapomniałem go zmienić w opcjach bash, szczerze mówiąc nawet o tym nie myślałem.
StalkAlex,
Pamiętaj, że wypróbowałem wszystkie domyślne opcje w systemie Windows (w tym kod źródłowy Pro), a znak zaznaczenia (✔) działał tylko dla mnie z czcionką „DejaVu Sans Mono” sugerowaną przez @ user3599934!
Sevron
10

Aby dodać do odpowiedzi Doctorj, istnieje kilka czcionek zainstalowanych domyślnie, których można użyć (w powłoce bash systemu Windows 10).

Testowane języki: bułgarski, ukraiński, chiński uproszczony, chiński tradycyjny, duński, francuski, niemiecki, włoski, japoński, kazachski, koreański, macedoński, mongolski, norweski, polski, portugalski, rosyjski, serbski, hiszpański, szwedzki.

Następujące domyślne czcionki wyświetlają wszystkie zaobserwowane znaki:

  • MS Gothic
  • NSimSun
    • Nie wydaje się wyświetlać całego kazachskiego.
  • SimSun-ExtB (czcionka rastrowa) - Moja rekomendacja

Zarówno MS Gothic, jak i NSimSun

  • Oddziela języki inne niż łaciński (CJK, chiński, japoński, koreański) (macedoński, kazachski, bułgarski).
  • Ma nieparzyste przesunięcie w pionie na akcentowane znaki łacińskie (á, é).
  • Nie wyświetlał co najmniej jednej macedońskiej postaci.

SumSun-ExtB (czcionka rastrowa):

  • Komunikat ostrzegawczy mówi, że czcionki Raster mogą nie wyświetlać się dobrze.
  • Większość znaków jest wyświetlana ciemno (może to być problem z niską jasnością ekranu).
  • Znaki inne niż ASCII są jasne, w porównaniu do znaków ASCII (możliwe rozwiązanie, użyj opcji pogrubienia).
  • Znaki wszystkich języków blisko siebie (łatwiej dostrzec odstępy między słowami).
  • Wydaje się bardziej niezawodny w przypadku języków niełacińskich innych niż CJK.

W przypadku dowolnej z tych czcionek, zarówno wiersza polecenia, jak i programu PowerShell, po kliknięciu znaków spoza zestawu ASCII zdarzają się dziwne rzeczy, choć po podświetleniu tekst wraca do normy.

Aby zainstalować czcionkę: Pamiętaj, że musisz zmienić czcionkę używanej powłoki Windows, takiej jak Wiersz polecenia lub PowerShell, a nie Linux poprzez bash. Ten link opisuje, które czcionki mogą być używane w wierszu polecenia (czcionki Monospace oraz jak zainstalować i wybrać czcionkę w wierszu polecenia): Dodaj czcionki do wiersza polecenia

  • Wyświetl Edytor rejestru (uruchom „regedit”)
  • Znajdź folder HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Console \ TrueTypeFont
  • Kliknij prawym przyciskiem myszy (lub Edytuj) -> Nowy -> Wartość ciągu
  • Nazwij czcionkę jednym 0 więcej niż ostatnim (np. „000”).
  • Kliknij wpis prawym przyciskiem myszy i wybierz „Zmień ...”
  • Wprowadź nazwę czcionki lub pliku OTF (bez .otf).

Aby uzyskać informacje na temat instalowania czcionek za pomocą wiersza polecenia w systemie Windows, zobacz to pytanie i odpowiedzi.

  • Próbowałem zainstalować „Source Code Pro”, ale nie pojawił się on dla czcionek.
  • Zainstalowałem DejaVu Sans Mono i działa w większości języków, ale w ogóle nie działa w CJK.
  • Zainstalowałem czcionkę Monospace Noto Google i działała, ale nie dla CJK. Mówią też, że nie mają wsparcia dla CJK w przestrzeni kosmicznej.
  • Zainstalowałem Google Inconsolata i nie warto było próbować.
  • Zainstalowałem GNU FreeFont (FreeMono) i działało, ale nie dla CJK.
  • Poddałem się i wróciłem do SimSun-ExtB.

(Uwaga: Nie mam jeszcze wystarczającej reputacji, aby opublikować linki).

Joshua Mathias
źródło
6

Możesz wypróbować DejaVu Sans Mono - to działa dla mnie.

użytkownik3599934
źródło
11
Chociaż może to być rozwiązanie problemu PO, jest to raczej wskazówka niż odpowiedź wysokiej jakości. Można to poprawić, podając instrukcje dotyczące: 1) zmiany czcionki w terminalu Windows 10 Bash; 2) jak zainstalować wspomnianą czcionkę (chyba że domyślnie jest ona w każdym systemie Windows 10 - jestem w systemie Linux, nie wiem).
Kamil Maciorowski
1
Używałem wcześniej Ubuntu Mono i miałem z tym problem. DejaVu Sans Mono rozwiązał problem.
smonff
0

To naprawdę bardziej komentarz niż odpowiedź, ale ponieważ SE nie pozwala mi na komentowanie ...

Nie podałeś wystarczających informacji. Unicode zapewnia ponad milion możliwych znaków, z których zdefiniowano ponad 100 000. (Pozostałe mają zastosowanie, gdy kontaktujemy się z istotami pozaziemskimi lub bardziej prawdopodobne w przypadku systemów pisania Ziemian, które nie zostały jeszcze zakodowane.) Są one podzielone na około 150 skryptów: łaciński, cyrylica, arabski, chiński ... Żadna czcionka nie będzie aby dostarczyć glify (zdjęcia postaci) dla wszystkich tych postaci. (Istnieje jeden lub dwa, które dostarczają pudełko z kodem w środku, ale nie tego chcesz.)

Jak powiedział grawitacja ponad dwa lata temu, jeśli otrzymujesz pudełko, w którym oczekujesz jednego znaku, oznacza to, że Twoja aplikacja już wyświetla Unicode (prawdopodobnie kodowanie UTF-8 w Unicode). Brakuje czcionki, która dostarcza glify do wszystkich skryptów, które chcesz wyświetlić. Jeśli wyświetlasz rosyjski, potrzebujesz czcionki ze znakami cyrylicy; jeśli chcesz wyświetlić chiński, potrzebujesz czcionki z tymi znakami. (Większość takich czcionek wyświetla również znaki łacińskie - takie, których używamy w języku angielskim - ale niekoniecznie ładne).

Więc moje pytanie dotyczy: jaki skrypt próbujesz wyświetlić? Dopóki się tego nie dowiemy, wszystkie odpowiedzi będą odgadnąć.

BTW, niektóre skrypty są dość skomplikowane i tylko niektóre programy wyświetlają je poprawnie, nawet jeśli masz odpowiednią czcionkę. Wśród nich są birmańskie, niektóre skrypty indyjskie (na przykład Devanagari) i arabski (napisany od prawej do lewej i zawierający znaki, które powinny być wyświetlane inaczej w zależności od sąsiednich znaków).

Mike Maxwell
źródło