提问者:小点点

为什么这些不同的编码不允许我正确显示葡萄牙语?


我正在做一些涉及葡萄牙语文本的文本挖掘。我的一些自定义文本挖掘功能中也有其他特殊字符。

我不是这个主题的专家。当我的许多字符开始显示不正确时,我认为我需要更改文件编码。我试过了

  • ISO-8858-1
  • ISO-8858-7
  • UTF-8
  • 窗口-1252

它们都没有改善字符的显示。我需要不同的编码还是我的方法都错了?

例如,当我尝试从GitHub阅读这个停用词列表时:

stop_words <- read.table("https://gist.githubusercontent.com/alopes/5358189/raw/2107d809cca6b83ce3d8e04dbd9463283025284f/stopwords.txt") 

它们是这样出来的:

tail(stop_words, 17)
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

我也用stringsAsFactors=F尝试过。

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

以防有帮助:

Sys.getlocale()

[1]"LC_COLLATE=English_United;LC_CTYPE=English_United;LC_MONETARY=English_United;LC_NUMERIC=C;LC_TIME=English_United。

我还尝试更改区域设置,stri_encode(stop_words$V1, "", "UTF-8")尾(enc2native(as. vector(stop_words[,1])),17)


共2个答案

匿名用户

我是葡萄牙人,我有同样的问题,虽然我的编码是

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"

所以我在网上查了一下,在SO找到了这个提示。

stop_words2 <- sapply(stop_words, as.character)

它起作用了。但我使用read. table(…,stringsAs因素=FALSE)读取数据。

匿名用户

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

这是utf-8中字符的图表:http://www.i18nqa.com/debug/utf8-debug.html.
现在查看“实际”列。

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

一个临时解决方案是解码一层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

好的,所以它没有按原样工作,所以我在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

最后,我使用了大写字母的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

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