C ++字符串/字符和重音符号

时间:2013-09-16 03:02:29

标签: c++ string char non-ascii-characters

我正在用C ++编写一个文本编写器,我将使用一个短语字符串并为每个char值显示相应的位图字体。

现在,它适用于常规角色,但是我会为重音和其他角色(例如À,Á,Â,Ã等)获得奇怪的值

我这样做:

int charToPrint = 'a';
//use this value to figure which bitmap font to display

位图字体确实有这些字符,但是在这一行上我没有得到我应该得到的值,例如:195为Ã,199为Ç< / strong>等...

我尝试将项目的字符集从Multi Byte更改为Unicode,但我认为这对char-&gt; int转换没有任何作用......

如何使用字符进行此转换?

编辑:我正在使用Visual Studio 2012,Windows 7,它是一个带位图字体的OpenGL应用程序。 我根据它的 char 值映射了每个角色的位置/宽度/高度,因此角色 a 位于我的位图字体的位置97(加上宽度)占了)。

要绘制,我只需要根据字符代码计算位置。

我有一个我要显示的短语字符串,我循环遍历每个字符,计算charCode,并调用我的绘制函数。

对于带有重音的这些字符,我得到负值,所以我的绘制函数不做任何事情(例如,对于Ç没有位置-30)。 我需要弄清楚如何正确获取这些值并发送到绘图函数。

1 个答案:

答案 0 :(得分:3)

使用Unicode ,已经是2013年了The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets

您将使用 wchar_t 作为类型和 UTF-16 / UTF-32 编码。这将使您的代码不仅支持“不规则”字符,而且支持更多“不规则”字符:)(没有普通字符这样的东西)。

示例

wchar_t c = L'Á';
printf("char: %lc encoding: %d\n", c, c);

c = 0xc1; 
printf("char: %lc encoding: %d\n", c, c);

<强>输出

char: Á encoding: 193
char: Á encoding: 193