Обновлять:

Обновлять:

Мы знаем, что существует приложение AppLocale, которое может изменить кодовую страницу приложений, не поддерживающих Unicode, для решения проблем с отображением текста.

Но есть программа, чьяправый дисплей кодовая страницаэто UTF-8, что означаетего текст должен отображаться как UTF-8, но вместо этого Windowsотображает его как собственную кодовую страницуи делает текст нечитаемым. Это кажется забавным, потому что есть почти все страны и регионы, но без UTF-8. Я думаю, что это ошибка, потому что программисты могут использовать английский и игнорировать тестирование проблем отображения неанглийского текста. Я не думаю, что производитель исправит это, и я хочу исправить это сам.

Можно ли установить вывод не-Unicode как UTF-8 с помощью программного обеспечения, например AppLocale? По умолчанию вывод не-Unicode — это собственная кодовая страница? Как установить собственную кодовую страницу на UTF-8?

решение1

Раньше это было невозможно, потому что

Microsoft заявила, что локаль UTF-8 может нарушить работу некоторых функций (возможный пример — _mbsrev), поскольку они были написаны с расчетом на то, что многобайтовые кодировки используют не более 2 байт на символ, поэтому до сих пор кодовые страницы с большим количеством байтов, такие как GB 18030 (cp54936) и UTF-8, не могли быть установлены в качестве локали.

https://en.wikipedia.org/wiki/Unicode_in_Microsoft_Windows#UTF-8

Однако есть«Бета: использование Unicode UTF-8 для поддержки языков по всему миру»флажок, начиная с версии Windows 10 Insider build 17035, для установки кодовой страницы локали на UTF-8

Бета-версия: использование Unicode UTF-8 для поддержки языков по всему миру

Смотрите также

Тем не менее, на данный момент поддержка все еще глючит.


Обновлять:

Microsoft также добавила возможность программам использовать локаль UTF-8 даже без установки флага UTF-8 beta выше. Вы можете использовать/execution-charset:utf-8или/utf-8параметры при компиляции с MSVC или установите свойство ActiveCodePage в appxmanifest

Вы также можете использовать локаль UTF-8 в старых версиях Windows, связавшись с соответствующей средой выполнения C.

Начиная с Windows 10 build 17134 (обновление за апрель 2018 г.), Universal C Runtime поддерживает использование кодовой страницы UTF-8. Это означает, что charстроки, передаваемые в функции среды выполнения C, будут ожидать строки в кодировке UTF-8. Чтобы включить режим UTF-8, используйте "UTF-8" в качестве кодовой страницы при использовании setlocale. Например, setlocale(LC_ALL, ".utf8")будет использовать текущую кодовую страницу Windows ANSI по умолчанию (ACP) для локали и UTF-8 в качестве кодовой страницы.

...

Чтобы использовать эту функцию в ОС до Windows 10, например Windows 7, необходимо использоватьразвертывание локального приложенияили статически связать с помощью версии 17134 Windows SDK или более поздней. Для операционных систем Windows 10 до 17134 поддерживается только статическая компоновка.

Поддержка UTF-8

решение2

Из того, что я прочитал о MicrosoftИнструмент AppLocale на Википедии, инструмент НЕ может изменить вашу кодовую страницу на UTF-8.Работает только с приложениями, не поддерживающими Unicode., но UTF-8 является частью стандарта Unicode.

По сути, обработка символов, отличных от ASCII, в Unicode существенно отличается от обработки не-Unicode, поэтому, хотя переключение между кодовыми страницами, отличными от Unicode, возможно (именно это делает AppLocale), переключение между Unicode и не-Unicode без внесения изменений в приложение, сделанных его разработчиком, НЕВОЗМОЖНО.

решение3

Просто упомяну об этом здесь: в Windows 10 17133 теперь есть бета-опция использования UTF-8 для всемирной поддержки. Но она не помогает мне с не-Unicode-программами на данный момент, но она размещена во всплывающем окне, где я могу изменить локаль для не-Unicode-программ.

Так что, возможно, они работают над чем-то, что позволит устранить необходимость менять локаль для программ, не поддерживающих Unicode.

Связанный контент