Jakie jest prawdziwe znaczenie okna dialogowego „Wybierz język dla programów nieobsługujących kodu Unicode…”?

7

Jakie jest prawdziwe znaczenie okna dialogowego „Wybierz język odpowiadający wersji językowej programów nieobsługujących kodu Unicode, z których chcesz korzystać” w Panelu sterowania-> Ustawienia regionalne-> Zaawansowane w WinXP i Win2003?

Zgodnie z tekstem okna dialogowego system Windows użyje tego do wyświetlenia ciągów zasobów, takich jak menu. Traktowanie plików tekstowych jest specyficzne dla aplikacji, więc to ustawienie nie wpłynie na to.

Ale czy mogę spodziewać się jakiejkolwiek innej zmiany w zachowaniu z tego ustawienia? Jakieś spostrzeżenia na temat tego, co naprawdę dzieje się po zmianie tego ustawienia?

Edycja: Jaki jest wewnętrzny (np. Windows API) sposób uzyskania dostępu do wartości?

Joshua Fox
źródło
Czy potrafisz rozwinąć problem? Czy zmieniłeś tę wartość i widzisz nieoczekiwane wyniki? Jeśli tak, jakie wyniki?
ChrisF
Dość nowoczesna aplikacja (której tożsamości wolałbym nie wspomnieć) wykazuje nieco inne zachowania w tym ustawieniu - i to nie tylko w wyświetlaniu ciągów interfejsu użytkownika, takich jak menu i okna dialogowe.
Joshua Fox,

Odpowiedzi:

7

Szybka odpowiedź: system Windows używa tego ustawienia jako wskazówki do konwersji między starszymi 8-bitowymi znakami ASCII i nowoczesnymi 16-bitowymi znakami Unicode. Niektóre aplikacje nadużywają tego ustawienia, aby określić, który język interfejsu użytkownika powinien zostać wyświetlony.

Traktowanie plików tekstowych jest specyficzne dla aplikacji, więc to ustawienie nie wpłynie na to.

Nie do końca prawda. Oto kilka przykładów: (po ustawieniu na język koreański dla programów nieobsługujących kodu Unicode „\” (odwrotny ukośnik) jest zastępowany przez „₩” (symbol waluty koreańskiej))

  • W wielu aplikacjach wszystkie „\” pojawiają się jako „₩”. Spójrz na gVim (edytor tekstu). Uwaga: podstawowe dane są nadal takie same, jak w przypadku wyświetlenia „\”. Jeśli otworzysz ten plik na innym komputerze, ponownie będzie wyglądał jak „\”.
  • Wszystkie ścieżki plików są rozdzielane przez „₩”.
  • Niektóre aplikacje, takie jak sterowniki wideo Intela, pobierają to ustawienie, aby zdecydować, który język interfejsu użytkownika ma być wyświetlany.

alternatywny tekst

Podstawowe informacje:

System Windows służył do przechowywania ciągów z 8-bitowymi znakami ASCII. Oznacza to, że każdy znak używał 8 cyfr binarnych. To pozwoliło tylko na 256 różnych znaków; za mało, aby reprezentować wszystkie pisane języki świata. Dlatego różne regiony językowe postanowiły interpretować znaki 8-bitowe inaczej, aby pasowały do ​​ich własnego języka (dodając akcentowane samogłoski, własny znak waluty oprócz „$” itp.). Nazywa się to kodowaniem. Aplikacje muszą wyraźnie informować system Windows, którego kodowania użyć; wiele programów tego nie robi, więc system Windows zakłada lokalne kodowanie dla tej wersji systemu Windows.

Teraz Windows przechowuje ciągi znaków z 16-bitowymi znakami Unicode. Każda postać używa dwa razy więcej bitów. Pozwala to na (prawie) 65 536 różnych znaków. Wciąż za mało, aby reprezentować wszystkie pisane języki świata, ale Unicode określa również sposób wybierania określonych zestawów znaków z dużo szerszej puli znaków.

Co teraz robi system Windows, gdy działa stary program, który nie zna Unicode? Windows musi przekonwertować między 8-bitowymi znakami ASCII i 16-bitowymi znakami Unicode. Windows może to zrobić całkiem dobrze, jeśli starsza aplikacja wyraźnie określa kodowanie, ale wiele aplikacji tego nie robi. Zatem Windows domyślnie przyjmuje ustawienie: Język dla programów nieobsługujących kodu Unicode.


Edycja: odpowiadanie na komentarze Jozuego

Więc oprócz wyboru kodowania ciągów GUI, to ustawienie może wpływać na wybór czcionek (wydaje mi się, że ₩ jest po prostu reprezentacją czcionki dla czegoś, co pojawia się jako odwrotny ukośnik w czcionkach europejskich, nie?)

Tak i nie. Występuje coś, co nazywa się „ łączeniem czcionek ”, aby wyświetlać „₩”, gdy czcionka TrueType nie zawiera tego znaku. Tylko „₩” jest wyświetlane inną czcionką. Jednak w przypadku czcionek innych niż TrueType używana jest zupełnie inna czcionka (na przykład w konsoli cmd). Symbole walut są bardzo szczególnym przypadkiem. System Windows wykonuje dodatkową pracę, zastępując symbol „\” symbolem lokalnej waluty, aby zachować zachowanie poprzednich wersji systemu Windows.

Czcionki systemu Windows są również zmieniane za pomocą czegoś zwanego „ zastępowaniem czcionek ”. W takim przypadku czcionki systemowe są całkowicie zastępowane nową czcionką (chociaż nazwa czcionki pozostaje taka sama). Z mojego doświadczenia z koreańskimi ustawieniami narodowymi nowa podstawiona czcionka nie wygląda tak ładnie jak oryginalna czcionka.

Czy to ustawienie wpływa na coś jeszcze?

Miałem rzadkie doświadczenia, w których używanie koreańskich ustawień narodowych powodowało nieprawidłowe działanie aplikacji. Jedna aplikacja, którą pamiętam, była narzędziem podglądu wyrażeń regularnych. Po prostu nie dało to prawidłowych wyników, gdy w koreańskich ustawieniach narodowych (a może nawet by się nie uruchomiło?) Musiałem przełączyć się na ustawienia amerykańskie, ilekroć chciałem używać tego programu.

Leftium
źródło
Dziękuję Ci. Więc oprócz wyboru kodowania ciągów GUI, to ustawienie może wpływać na wybór czcionek (wydaje mi się, że ₩ jest po prostu reprezentacją czcionki dla odwrotnego ukośnika w czcionkach europejskich, nie?) Także sterowniki wideo Intel używają tego, aby wybrać język interfejsu użytkownika (które są czasami nakładkami, które nie używają systemu operacyjnego). Czy to ustawienie wpływa na coś jeszcze?
Joshua Fox
@Joshua Zaktualizowałem wpis, aby uwzględnić twoje komentarze.
Leftium
Dzięki - czy znasz wewnętrzny (np. Windows API) sposób dostępu do wartości „Język dla programów nieobsługujących kodu Unicode”?
Joshua Fox
@Joshua Wypróbuj GetUserDefaultLCID () ( msdn.microsoft.com/en-us/library/dd318135.aspx ) Zapytaj na Stackoverflow.com, czy chcesz potwierdzić ...
Leftium
1
To jest modelowa odpowiedź dla Superuser. Informacje + osobiste doświadczenia autora + dobrze sformatowane + ciągła rewizja + zdjęcia.
hyperslug
1

Platformy oparte na Unicode, takie jak Windows XP i Server 2003, emulują środowisko językowe wymagane do uruchamiania aplikacji nieobsługujących kodu Unicode poprzez wewnętrzną konwersję danych tekstowych nieobsługujących kodu Unicode na Unicode przy użyciu zmiennej systemowej zwanej zwykle „ustawieniami systemowymi” (lub „językiem” dla aplikacji nieobsługujących kodu Unicode ”). Językiem aplikacji nieobsługujących kodu Unicode powinien być ten sam skrypt lub rodzina, co język zdefiniowany w „ustawieniach regionalnych systemu”. Niespełnienie tego warunku powoduje wyświetlenie niepotrzebnych znaków w interfejsie użytkownika aplikacji.

Źródło .

Lub:

To ustawienie umożliwia programom, które nie obsługują Unicode, wyświetlanie menu i okien dialogowych w ich ojczystym języku przez zainstalowanie niezbędnych stron kodowych i czcionek. Jednak programy zaprojektowane dla innych języków mogą nie wyświetlać poprawnie tekstu.

To ustawienie ma wpływ tylko na programy inne niż Unicode. Język wybrany dla tej opcji nie zmienia menu i okien dialogowych Windows lub innych programów Unicode.

z Aby wyświetlić programy inne niż Unicode w swoim języku ojczystym .

Więcej informacji na stronie Language for Non-Unicode Programs .

Hugh Allen
źródło
Dzięki. Dziękuję Ci. To ustawienie wybiera kodowanie ciągów GUI w starych programach. Artykuł, który podlinkowałeś, mówi, że to ustawienie było nazywane „ustawieniami systemowymi systemu”. Wydaje się, że nie wpływa to na nic poza ciągami interfejsu użytkownika. Czy jest coś jeszcze?
Joshua Fox,