当我用“ñ”字符遍历字符串时出现奇怪的结果
Posted
技术标签:
【中文标题】当我用“ñ”字符遍历字符串时出现奇怪的结果【英文标题】:Weird results when I iterate through string with "ñ" char 【发布时间】:2020-05-13 11:00:34 【问题描述】:我有一串字符,其中一个可能的字符是字母“ñ”。我的问题是,当我尝试修改它或遍历字符串时,我的字符串的行为似乎很奇怪。例如,如果我有代码:
std::ifstream infile (argv[1]);
std::string texto_crudo((std::istreambuf_iterator<char>(infile)), std::istreambuf_iterator<char>());
for (int i = 0; i<texto_crudo.length(); i++)
if(es_enie(texto_crudo[i]))
texto_crudo[i] = '$';
如果 texto_crudo[i] = ñ,则 es_enie 返回 true。似乎在 ñ 所在的单元格中,它的行为就好像它有两个值而不是一个。
【问题讨论】:
可能是因为文件中的文本恰好是UTF-8 编码的? 我不熟悉 UTF-8。我需要阅读的文件是一个 .txt 文件。如果这是问题,我该如何解决? 您必须替换子字符串"ñ"
(长度为2)而不是单个字符。
为什么这个问题的分数是-1?对我来说,这似乎是一个真正的问题。
使用(自定义)ReplaceAll,它将是 ReplaceAll(texto_crudo, "ñ", "$");
【参考方案1】:
我设法找到了解决我确切问题的方法。正如一些程序员老兄评论的那样,这是因为我的文本是 UTF-8 格式的,我需要将其转换为 iso-8859-1 才能正确使用“ñ”。 Convert string from UTF-8 to ISO-8859-1
【讨论】:
或者,您可以修复es_enie
以便它采用 utf8 输入。字符不一定是1char
long以上是关于当我用“ñ”字符遍历字符串时出现奇怪的结果的主要内容,如果未能解决你的问题,请参考以下文章