Мы знаем, что существует приложение 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
Смотрите также
- Изменение кодовой страницы ANSI и OEM в Windows
- Windows 10 Insider Preview Build 17035 поддерживает UTF-8 как ANSI
Тем не менее, на данный момент поддержка все еще глючит.
- Проблема зависания в Windows 10 1803 при использовании UTF-8 в качестве кодовой страницы по умолчанию
- при включении поддержки бета-версии Unicode в Windows 10 не устанавливаются дополнения
- Поддержка UTF-8 для однобайтовых наборов символов находится на стадии бета-тестирования в Windows и, скорее всего, приведет к сбоям в работе многих приложений, не ожидающих этого.
- Ошибка сборки из-за внутренней ошибки в MSVC
Обновлять:
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 поддерживается только статическая компоновка.
решение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.