You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中读取UTF-8编码瑞典语XML文件时特殊字符乱码如何解决?

解决瑞典语XML特殊字符乱码问题

你的乱码问题是编码不匹配/双重解码导致的:XML声明标注UTF-8,但服务器实际返回的内容可能采用Latin-1(ISO-8859-1)编码,手动指定UTF-8解码会破坏原始字符的字节结构,出现å变Ã¥这类乱码。以下是几种可行的解决方法:

方法一:让XML解析器自动处理原始二进制内容

跳过手动转文本的步骤,直接把响应的原始二进制内容传给xmlParse,它会根据XML开头的编码声明自动识别并解析:

library(httr)
library(XML)

UA <- "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36"
my_url <- "https://weburn.kb.se/riks/tv%C3%A5kammarriksdagen/xml/1867/web_mot_1867__fk__1/mot_1867__fk__1.xml"

my_doc <- GET(my_url, user_agent(UA))
# 传入原始二进制内容,交由xmlParse自动处理编码
res <- xmlParse(content(my_doc, "raw"))

方法二:匹配服务器实际返回的编码

先检查服务器响应头里的官方编码声明:

# 查看Content-Type头,确认服务器指定的编码
headers(my_doc)$`content-type`

如果返回结果包含charset=ISO-8859-1,就用该编码读取文本内容:

res <- xmlParse(content(my_doc, "text", encoding = "ISO-8859-1"))

方法三:用xml2包替代(推荐)

xml2包的read_xml对编码的自动处理逻辑更健壮,能规避很多传统XML解析库的编码问题:

library(httr)
library(xml2)

UA <- "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36"
my_url <- "https://weburn.kb.se/riks/tv%C3%A5kammarriksdagen/xml/1867/web_mot_1867__fk__1/mot_1867__fk__1.xml"

my_doc <- GET(my_url, user_agent(UA))
res <- read_xml(content(my_doc, "raw"))
# 验证特殊字符是否正常显示
xml_text(xml_find_first(res, "//formatting"))

问题根源

你之前的代码中,content(my_doc, "text", encoding = "UTF-8")强制用UTF-8解码,但服务器实际返回的内容是Latin-1编码,导致UTF-8解码时把原单字节字符拆分成了错误的多字节序列,最终出现乱码。让解析器直接处理原始内容,或匹配正确的编码,就能恢复å、ä、ö等特殊字符的正常显示。

内容的提问来源于stack exchange,提问作者Tordir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 19:23:20