I try to draw text using a dll library which has only interfaces of ANSI version encapsulated windows ANSI apis, but I need to store string data using utf-8. I don't want to convert strings using MultiByte/WideChar functions so I want an approach to change the CP_ACP in my application, so that I can input string data into ANSI apis. thanks.
ps: I don't want to change the system default codepage.
CP_ACP
represents the system Ansi codepage. You cannot change that on a per-process or per-thread basis. It is a system-wide setting. If the DLL really is dependant on CP_ACP
internally, then you have no choice but to convert your from/to UTF-8 whenever you interact with the DLL.
Starting with Windows 10 v1903, you can use the application manifest to set the active code page for a given process, which might be different from the system-wide code page :
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity type="win32" name="..." version="6.0.0.0"/>
<application>
<windowsSettings>
<activeCodePage xmlns="http://schemas.microsoft.com/SMI/2019/WindowsSettings">UTF-8</activeCodePage>
</windowsSettings>
</application>
</assembly>
Obviously, if you need to support older versions of Windows, the application must still be aware that CP_ACP
might not be CP_UTF8
and perform any necessary conversions itself.
More details can be found in Microsoft Docs.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With