当我用“ñ”字符遍历字符串时出现奇怪的结果

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 输入。字符不一定是1charlong

以上是关于当我用“ñ”字符遍历字符串时出现奇怪的结果的主要内容,如果未能解决你的问题,请参考以下文章

使用 QTcpSocket 传输文件时出现奇怪的字符

将 .csv 导入 R 时出现 UTF-8 编码错误?

使用 vigenere 密码加密时出现奇怪的错误

尝试遍历字符串时出现 java.lang.StringIndexOutOfBoundsException

在数据库中保存表情符号时出现奇怪的字符。这是正常的吗?

使用 sysdate 创建默认列,但在插入数据时出现字符变化错误