R 为什么不';难道这些不同的编码不能让我正确地显示葡萄牙语吗?

R 为什么不';难道这些不同的编码不能让我正确地显示葡萄牙语吗?,r,text,encoding,character-encoding,R,Text,Encoding,Character Encoding,我正在做一些涉及葡萄牙语文本的文本挖掘。我的一些自定义文本挖掘函数中还包含其他特殊字符 我不是这方面的专家。当我的许多字符开始错误显示时,我认为我需要更改文件编码。我试过了 ISO-8858-1 ISO-8858-7 UTF-8 WINDOWS-1252 它们都没有改善字符的显示。我需要一种不同的编码方式吗?还是我完全错了 例如,当我尝试从GitHub中读取此stopwords列表时: stop_words <- read.table("https://gist.githubuserc

我正在做一些涉及葡萄牙语文本的文本挖掘。我的一些自定义文本挖掘函数中还包含其他特殊字符

我不是这方面的专家。当我的许多字符开始错误显示时,我认为我需要更改文件编码。我试过了

  • ISO-8858-1
  • ISO-8858-7
  • UTF-8
  • WINDOWS-1252
它们都没有改善字符的显示。我需要一种不同的编码方式吗?还是我完全错了

例如,当我尝试从GitHub中读取此stopwords列表时:

stop_words <- read.table("https://gist.githubusercontent.com/alopes/5358189/raw/2107d809cca6b83ce3d8e04dbd9463283025284f/stopwords.txt") 
我还尝试了
stringsAsFactors=F

我不会说葡萄牙语,但我的直觉告诉我,欧元和版权符号不在字母表中。此外,它似乎正在将一些重音的小写字母改为重音不同的大写字母A

如果有帮助:

Sys.getlocale()
[1] “LC_COLLATE=英语与美国。1252;LC_CTYPE=英语与美国 美国1252;信用证货币=英国和美国 States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252“


我还试着改变语言环境,
stri\u编码(stop\u words$V1,“,“UTF-8”)
tail(enc2native(as.vector(stop\u words[,1])),17)

您似乎对utf-8进行了双重编码

以下是utf-8中的字符图表:。
现在看看“实际”一栏

如您所见,打印的字符似乎代表实际值,而不是编码值

暂时的解决办法是解码一层utf-8

更新:

安装R后,我试图重现该问题。
这是我的控制台日志,有一个简单的解释:

首先,我复制粘贴了您的代码:

> stop_words <- read.table("https://gist.githubusercontent.com/alopes/5358189/raw/2107d809cca6b83ce3d8e04dbd9463283025284f/stopwords.txt")
> tail(stop_words, 17)
             V1
206  tivéramos
207       tenha
208    tenhamos
209      tenham
210     tivesse
211 tivéssemos
212    tivessem
213       tiver
214    tivermos
215     tiverem
216       terei
217       terá
218     teremos
219      terão
220       teria
221   teríamos
222      teriam
>停止字尾(停止字,17)
V1
206蒂夫©拉莫斯
207天那
208特纳莫斯
209特纳姆
210蒂维斯
211 tivéssemos
212蒂维塞姆
213 tiver
214 tivermos
215蒂维雷姆
216特雷
217之三
218特雷莫斯
219之三195
220泰里亚
221特里厄莫斯
222泰瑞安
好的,所以它没有按原样工作,所以我在read.table函数的末尾添加了编码参数。 当我尝试使用小写utf-8时,结果如下:

> stop_words <- read.table("https://gist.githubusercontent.com/alopes/5358189/raw/2107d809cca6b83ce3d8e04dbd9463283025284f/stopwords.txt",encoding="utf-8")
> tail(stop_words, 17)
             V1
206  tivéramos
207       tenha
208    tenhamos
209      tenham
210     tivesse
211 tivéssemos
212    tivessem
213       tiver
214    tivermos
215     tiverem
216       terei
217       terá
218     teremos
219      terão
220       teria
221   teríamos
222      teriam
>停止字尾(停止字,17)
V1
206蒂夫©拉莫斯
207天那
208特纳莫斯
209特纳姆
210蒂维斯
211 tivéssemos
212蒂维塞姆
213 tiver
214 tivermos
215蒂维雷姆
216特雷
217之三
218特雷莫斯
219之三195
220泰里亚
221特里厄莫斯
222泰瑞安
最后,我使用了带有大写字母的UTF-8,现在它可以正常工作了:

> stop_words <- read.table("https://gist.githubusercontent.com/alopes/5358189/raw/2107d809cca6b83ce3d8e04dbd9463283025284f/stopwords.txt", encoding = "UTF-8")
> tail(stop_words, 17)
            V1
206  tivéramos
207      tenha
208   tenhamos
209     tenham
210    tivesse
211 tivéssemos
212   tivessem
213      tiver
214   tivermos
215    tiverem
216      terei
217       terá
218    teremos
219      terão
220      teria
221   teríamos
222     teriam
>停止字尾(停止字,17)
V1
206蒂夫·拉莫斯
207天那
208特纳莫斯
209特纳姆
210蒂维斯
211蒂维塞莫斯
212蒂维塞姆
213 tiver
214 tivermos
215蒂维雷姆
216特雷
217特拉
218特雷莫斯
219泰朗
220泰里亚
221特里阿莫斯
222泰瑞安

您可能忘记了将编码参数放在read.table的末尾,或者尝试使用小写而不是大写。我从中了解到,如果您没有指定字符已经在UTF-8中编码,R会尝试将字符强制转换为UTF-8。

我是葡萄牙人,虽然我的编码是

Sys.getlocale()
[1] "LC_COLLATE=Portuguese_Portugal.1252;LC_CTYPE=Portuguese_Portugal.1252;LC_MONETARY=Portuguese_Portugal.1252;LC_NUMERIC=C;LC_TIME=Portuguese_Portugal.1252"
所以我在网上查了一下,在网上找到了这个提示


stop_words 2从图表中我可以看出你是正确的。我想知道如何听从你的建议。如果你知道怎么做,你能告诉我如何使用链接的GitHub文本吗?我看到了一些关于如何在Python中修复双重编码的示例,但没有看到R。如果找不到答案,我可能稍后会研究这个问题。我认为问题不在于葡萄牙语字母表。当我使用上面的代码从GitHub获得stop_单词时,我可以看到正确格式化的字符。如何更改文件编码?@OriolMirosa在更改系统默认编码(ISO-8859-1)之前,我遇到了问题。我尝试使用RStudio(用编码重新打开)更改它,然后重新封装数据。我还尝试用
stringi
包对其进行更改。我认为下面的答案是正确的,它以某种方式被双重编码,但我不知道为什么或如何修复它。您是否尝试过
enc2utf8(as.vector(stop_words[,1]))
enc2native(as.vector(stop_words[,1])
@OriolMirosa我没有尝试过,谢谢。我刚在你看了你的评论后试过,但问题仍然存在。嗯。。。你在哪个系统?你用RStudio吗?您的R终端使用什么字体?您能在终端中看到波浪形符号和其他拉丁字符吗?(如果您的键盘是英文的,请按alt+e,然后按e以获得“é”)非常感谢。这对我来说不起作用,但我们可以为将来的读者保留答案,他们可能会有与您的案例相同的问题/解决方案。@Hack-R:可能是因为您的区域设置而不起作用。你不能改变它吗?
> stop_words <- read.table("https://gist.githubusercontent.com/alopes/5358189/raw/2107d809cca6b83ce3d8e04dbd9463283025284f/stopwords.txt", encoding = "UTF-8")
> tail(stop_words, 17)
            V1
206  tivéramos
207      tenha
208   tenhamos
209     tenham
210    tivesse
211 tivéssemos
212   tivessem
213      tiver
214   tivermos
215    tiverem
216      terei
217       terá
218    teremos
219      terão
220      teria
221   teríamos
222     teriam
Sys.getlocale()
[1] "LC_COLLATE=Portuguese_Portugal.1252;LC_CTYPE=Portuguese_Portugal.1252;LC_MONETARY=Portuguese_Portugal.1252;LC_NUMERIC=C;LC_TIME=Portuguese_Portugal.1252"
stop_words2 <- sapply(stop_words, as.character)