Nawet w systemie Windows 7 możesz zrobić „katalog” i zobaczyć nazwy plików ze znakami Unicode?

5

Jest to nieco związane z pytaniem

W systemie Windows 7 katalog lub drzewo nie mogą wyświetlać znaków Unicode, nawet rozpoczynając cmd od cmd / U

Nawet w systemie Windows 7 odkryłem, że jedynym sposobem na uzyskanie kodu Unicode do pliku jest

> cmd /U
> dir /B > files.txt

plik będzie w „Unicode”, kiedy otworzę w Notatniku i spróbuję „Zapisz jako”, a jeśli ja dir /B > files.htmli otworzę plik HTML w Firefox, to mogę pokazać kodowanie UTF-16 (lub UTF-16 LE).

ale jeśli chcę zobaczyć to na ekranie zamiast przejść do pliku, nadal jest to niemożliwe. Czy istnieje sposób, aby tak się stało? Możliwe, że w jakiś sposób mówi cmd, aby nie wyświetlać znaków niedrukowalnych jako „?”

Aktualizacja: Próbowałem cmd.exe, bash cygwina w systemie Windows i PowerShell. Oni są tacy sami. Z wyjątkiem sytuacji, gdy zmienię „Właściwości -> Czcionka” na Consolas lub Lucida Console, jest pewne ulepszenie - teraz nie jest to znak zapytania, ale jest to kwadratowa ramka lub kwadrat ze znakiem zapytania.

Mogą to zrobić droższe komputery Mac z systemem Mac OS X. Darmowe Ubuntu też może to zrobić.

太極 者 無極 而 生
źródło

Odpowiedzi:

5

To bardzo stare pytanie, ale wszystkie podane tutaj odpowiedzi są błędne.

Nigdy nie zobaczysz danych wyjściowych Unicode w wierszu poleceń systemu Windows (CMD.exe). Powodem jest to, że CMD nie może wyświetlać Unicode. Może jednak wyświetlać DBCS (zestaw znaków dwubajtowych).

Jeśli chcesz na przykład wyświetlić dane wyjściowe w języku japońskim, musisz zmienić ustawienia regionalne systemu na japońskie i uruchomić ponownie. Następnie zobaczysz japońskie znaki DBCS (Shift-JIS) w wierszu poleceń. System Windows obsługuje strony kodowe DBCS w języku japońskim Shift-JIS, chińskim uproszczonym, koreańskim i chińskim tradycyjnym „Big5”.

Nawiasem mówiąc, możesz potokować UTF-16 (niepoprawnie używane zamiennie z „Unicode” przez Microsoft) do pliku, a następnie otworzyć ten plik, powiedzmy, w Notatniku i wyświetlić znaki Unicode. Możesz także oznaczyć i skopiować bełkotliwy tekst z CMD.exe i wkleić go do Notatnika i zobaczyć znaki Unicode. Innymi słowy, CMD obsługuje Unicode, ale nie wyświetla Unicode.

Więcej informacji można znaleźć w tym poście na blogu .

Jeff
źródło
1

Podejrzewam, że na podstawie Twojej nazwy użytkownika pracujesz głównie w językach azjatyckich.

Narzędzia Windows działają normalnie w trybie Unicode (jak widzieliście, przesyłając dane wyjściowe dirdo pliku i otwierając ten plik za pomocą edytora):

  1. narzędzie robi swoje
  2. wypisuje znaki Unicode
  3. inny program pobiera to wyjście i musi je wyświetlić.

aby wyświetlić dowolny znak na ekranie, program z kroku 3 musi wyszukać glif odpowiedni dla danej sekwencji bajtów. przykład:

  • 0x65 „a” odwzorowuje na inny glif w każdej czcionce (więc „a” wygląda inaczej dla każdej czcionki)

  • 0x937 „Ω” (grecka „omega”) odwzorowuje również inny glif w każdej czcionce

to mapowanie działa tylko wtedy, gdy czcionka ma glif dla podanej sekwencji bajtów. w przeciwnym razie wynik wizualny jest różny, czasami widzisz „?”, czasem diamenty itp.

ponownie: dirtworzy sekwencje bajtów, które czasami są wyłącznie w zakresie ASCII, czasami są w zakresie Unicode (w zależności od znalezionych nazw plików). wysyła te sekwencje do innego programu, który jest odpowiedzialny za renderowanie sekwencji bajtów. aby móc wyświetlić te sekwencje, ten program musi odwzorować sekwencję na glif. aby to zrobić, musi wyszukać glif w czcionce. jeśli czcionka nie ma glifu dla danej sekwencji, wówczas program nie może wyświetlić sekwencji bajtów utworzonej na przykład przez dir.

więc rozwiązaniem twojego problemu (dostrzeganie dowolnego znaku Unicode w „konsoli / terminalu” systemu Windows) jest: użyj czcionki dla programu, który ma (prawie) każdy glif dla (prawie) dowolnej sekwencji bajtów unicode w nim.

akira
źródło
1
hm, ale cmd, cygwin bash i PowerShell są ograniczone do 3 czcionek: czcionek rastrowych, konsoli Lucida i konsol ... w rzeczywistości system Windows zwykle wraca do czcionki Unicode, gdy nie może wyświetlić niczego z bieżącą czcionką. .. także, jeśli przekieruję dane wyjściowe, tak jakby dir > file.txtto wciąż był znak zapytania w pliku, mimo że jest to „kwadratowe pole” na ekranie.
太極 者 無極 而 生
@Jian Lin: tak, ale to w zasadzie TWÓJ problem z czcionką zawierającą te glify. i nawet jeśli Windows wraca do „jakiejś” czcionki, która zawiera w sobie „niektóre” glify unicode ... to nie wystarczy, aby wyświetlić niektóre z twoich glifów azjatyckich (masz problemy z glifami azjatyckimi, prawda?).
akira
według niektórych stron internetowych „Ascender Uni Duo” wydaje się być najlepszą czcionką (nawet dla „naprawionych”) ascendercorp.de/fonts/multilingual/ascender-uni, ale może znajdziesz coś lepszego / tańszego en.wikipedia.org/wiki/ Unicode_typefaces
akira
@akira w Windows 7 jest wiele czcionek, które mogą wyświetlać cały zestaw glifów Unicode. Ale (1) okno Cmd nie pozwoli ci wybrać żadnego z nich. (2) Kiedy Windows lub aplikacja wraca do czcionki, która może wyświetlać Unicode, takiej jak Lucida Sans Unicode, może wyświetlać większość dowolnych chińskich znaków.
太極 者 無極 而 生
1
@akira: Dobra odpowiedź, po prostu zastąpiłbym „sekwencje bajtów” „ciągami 16-bitowymi” lub „ciągami UTF-16”, ponieważ tego właśnie używa system Windows.
Philipp
0

https://stackoverflow.com/questions/388490/unicode-characters-in-windows-command-line-how

Użyj, chcp 65001aby zmienić stronę kodową na UTF8 i użyj Lucida Console.

ta.speot.is
źródło
hm ... nadal nie działa ... cmd / U, chcp 65001, dir i dir / B z czcionką ustawioną już na Lucida Console, wciąż to samo.
太極 者 無極 而 生
1
Możesz spróbować dodać więcej czcionek do konsoli: support.microsoft.com/kb/247815 i blogs.msdn.com/b/oldnewthing/archive/2007/05/16/2659903.aspx (ten drugi w przypadku dyskusji na temat problem).
ta.speot.is
to wszystko zależy od czcionki dajesz program do renderowania tekstu. przeczytaj artykuł wsparcia, w nim dobre informacje.
akira
1
@taspeotis: Konsola Windows zawsze używa Unicode wewnętrznie, niezależnie od ustawienia strony kodowej (która i tak jest przestarzała i została uwzględniona tylko dla kompatybilności wstecznej). To naprawdę tylko problem z czcionkami.
Philipp
Czy można zastosować dowolną czcionkę zawartą w Win 7? takie jak MingLiU, DFKai-SB
太極 者 無極 而 生
0

Nie ma to nic wspólnego z kodowaniem, ponieważ konsola Windows zawsze używa wewnętrznie Unicode. Znaki są po prostu niedostępne w używanych czcionkach, które są przeznaczone do programowania i języków europejskich. W tej chwili nie mam dostępu do systemu Windows, ale pamiętam, że mogłem wydrukować greckie znaki po przejściu na czcionkę Lucida Console. Używanie czcionki takiej jak DejaVu Sans Mono może działać.

Philipp
źródło
Utworzyłem rosyjską nazwę pliku, a cmd.exe wyświetlał glify poprawnie po przejściu na lucida. w przypadku czcionek azjatyckich myślę, że OP musi wybrać „lepszą” lub więcej „kompletną stałą czcionkę Unicode” (nawet jeśli nie podoba mu się ta odpowiedź :)).
akira
0

Ok, to jest rozwiązanie wykorzystujące PowerShell:

1) Kliknij Startprzycisk w systemie Windows 7
2) Teraz w pustym wierszu wpisz PowerShell
3) WybierzPowerShell ISE <- zauważ, że takISE

Teraz, jeśli to zrobisz ls, będziesz mógł zobaczyć znaki Unicode ...

4) jeśli również użyjesz chcp 65001, to jeśli twój program wydrukuje znaki UTF-8, również będą ładnie wyświetlane.

Możesz także od czasu ls > list.txtdo czasu, type list.txta treść pojawia się również w postaci znaków Unicode.

tree nadal nie będzie wyświetlać znaków Unicode.

również wewnątrz programu PowerShell ISE cmd /U /C dir /Brównież nie będzie działać.

ls -R będzie.

太極 者 無極 而 生
źródło
lsw Powershell to tak naprawdę alias dla „Get-ChildItem”
KdgDev
i wtedy? nie mów mi, że używasz Get-ChildItemw wierszu poleceń codziennie zamiast ls. Na przykład zwykle pijemy wodę zamiast dwutlenku wodoru.
太極 者 無極 而 生