字符串中的外语C++

Ric*_*ick 0 c++

我正在开发一种多语言软件(第一次使用除英语之外的任何其他语言).

我已经制作了读取多个本地化文件的代码,然后用户选择了他们的语言,并使用了本地化文件.

这一切都很好,花花公子,但当我尝试显示外语(如韩语)的符号时,它没有显示正确的符号.

我需要做些什么特别的事情来将中文,韩文,日文等存储到字符串中吗?我的一个韩国本地化文件看起来像这样....

[Labels]
Username=??? ??
Password=??
Run Code Online (Sandbox Code Playgroud)

所以在我的代码中我有一个函数可以得到像这样的指定字符串...

const std::string& UsernameLabel = GetLocalizationString("Korean", "Labels", "Username");
const std::string& PasswordLabel = GetLocalizationString("Korean", "Labels", "Password");
Run Code Online (Sandbox Code Playgroud)

Yur*_*ula 5

问题的根源在于std::string它处理chars(在大多数情况下等于1个字节).一旦计划开发多语言软件,就必须执行以下操作之一:

  • 使用,std::wstring因为它处理"宽字符"(通常在Windows上2个字节).容易做,涵盖大多数情况.
  • 远离标准字符串类,并使用UTF-8(或UTF-32等)编码来表示UI信息.因此,它意味着使用字节缓冲区而不是字符串,因为某些符号使用多个字节进行编码,某些字节根本不是符号(如肤色,性别等的表情符号修饰符).最正确的方法可能很耗时.

更新:另外,您可能会发现此讨论很有用:std :: wstring VS std :: string