在c ++中向字符串添加变音符号失败

时间:2014-07-03 08:01:13

标签: c++ string diacritics

我想在string中的c++添加变音符号。假设我想以下列方式修改wordz字符串:

String respj = resp[j];                     
std::string respjz1 = respj;   // create respjz1 and respjz2 
std::string respjz2 = respj;

respjz1[i] = 'ź';   // put diacritic marks
respjz2[i] = 'ż';

我一直在接收:wordşwordĽ(而不是wordźwordż)。我试图谷歌它,但我一直得到与相反问题相关的结果 - 变音标准化到非变音标记。

1 个答案:

答案 0 :(得分:0)

首先,String是什么?它是否支持重音字符?

但真正的问题是编码之一。当你说“我保持 接收“,你是什么意思。字符串将包含什么 不是字符,而是表示代码点的数值 一些字符,在一些编码中。如果使用的编码 重音字符的编译器与编码相同 无论你使用什么来形象化它们,你都会得到 同一个角色。如果不是,你会得到一些东西 不同。因此,例如,取决于编码,LATIN 带点的小写字母Z(我认为你要分配的东西) respjz2[i])在我的编码表中可以是0xFD或0xBF 访问(并且在大多数单字节编码中不存在);在 我通常使用的单字节编码(ISO 8859-1),这些代码 点对应拉丁小写字母Y与急性和 分别为INVERTED QUESTION MARK。

最后,没有真正的解决方案。从长远来看,我想你 应该转移到UTF-8,并尽力确保所有的 您使用的工具(以及您的用户使用的所有工具) 明白。短期来看,可能不是那么简单:因为 首先,你或多或少地坚持你的编译器 提供(除非您输入\u00BF形式的字符 或者\u00FD,即使这样,编译器也可以做一些有趣的事情 将它们放入字符串文字时的映射)。而且你可以 甚至不知道用户使用的其他工具。