Как изменить CP_ACP (0) Windows ANSI API в приложении? - PullRequest
4 голосов
/ 27 января 2012

Я пытаюсь нарисовать текст, используя библиотеку dll, которая имеет только интерфейсы инкапсулированной версии ANSI windows ANSI apis версии ANSI, но мне нужно хранить строковые данные, используя utf-8.Я не хочу преобразовывать строки, используя функции MultiByte / WideChar, поэтому я хочу, чтобы подход изменил CP_ACP в моем приложении, чтобы я мог вводить строковые данные в API ANSI.спасибо.

ps: я не изменяю кодовую страницу системы по умолчанию.

Ответы [ 3 ]

5 голосов
/ 27 января 2012

CP_ACP представляет системную кодовую страницу Ansi. Вы не можете изменить это для каждого процесса или для каждого потока. Это общесистемная настройка. Если DLL-библиотека действительно зависит от CP_ACP внутри, то у вас нет другого выбора, кроме как конвертировать ваш файл из / в UTF-8 при каждом взаимодействии с DLL.

1 голос
/ 27 января 2012

UTF8 не является кодовой страницей, и поскольку кодовые страницы имеют смысл только для функций ANSI, вы не можете делать то, что просите.

Если вы хотите сохранить строку как UTF8, вам потребуется конвертировать из ANSI вашего приложения в кодировку Unicode (широкий символ), используя MultiByteToWideChar(), затем используйте WideCharToMultiByte() для преобразования в UTF8.

В качестве альтернативы, обновите ваше приложение, чтобы использовать строки Юникода / Wide для внутреннего использования, и конвертируйте при необходимости.

1 голос
/ 27 января 2012

"Как изменить CP_ACP?" - «Я не хочу (хочу) изменить системную кодовую страницу по умолчанию».

Ну, ты должен выбрать. CP_ACP - это системная кодовая страница по умолчанию.

...