【发布时间】:2018-04-15 20:20:11
【问题描述】:
所以,我正在尝试从名为Kanji-A-Day.com 的网站获取部分文本,但我遇到了问题。
你看,我正试图从网站上获取每日汉字,我能够将 HTML 缩小到我想要的范围,但字符似乎不同..?
更奇怪的是,第二张图片的结果是我直接从网站复制粘贴生成的,所以不是字体问题。
这是我用来获取角色的代码:
public void UpdateDailyKanji() // Called at the initialization of a new main form
{
string kanji;
using (WebClient client = new WebClient()) // Grab the string
kanji = client.DownloadString("http://www.kanji-a-day.com/level4/index.php");
// Trim the HTML to just the Kanji
kanji = kanji.Remove(0, kanji.IndexOf(@"<div class=""glyph"">") + 19);
kanji = kanji.Remove(kanji.IndexOf("</div>")-2);
kanji = kanji.Trim();
Text_DailyKanji.Text = kanji; // Set the Kanji
}
有人知道这里发生了什么吗?我猜这是一些 Unicode 的东西,但我不太了解它。
提前致谢。
【问题讨论】:
-
该页面使用
charset=EUC-JP编码(编码日语 (EUC) 代码页 51932,标题名称:euc-jp → Windows 代码页 932)。您必须对生成的文本进行相应的编码,并使用可以处理 Unicode 的字体(嗯,这不是问题)。 -
所以,我对编码知之甚少,但我假设您是在告诉我将“汉字”转换为 Unicode?如果我错了,请纠正我。
-
不完全是。您必须将生成的字符串(可能编码为 iso-8859-1 (CodePage 1252))转换为日语 (EUC) unicode 编码。您可以使用 MemoryStream 并将 WebClient 结果复制到其中,然后使用 StreamReader 重新编码流字节。如果你愿意,我可以发布一个例子。
-
@Sergey.quixoticaxis.Ivanov 如果未定义编码,则使用本地系统 CodePage。当源流是外部的时,这不应该发生,特别是如果它来自 Web,Unicode 代码点映射的事实标准是 UTF-8。这就是通常的处理方式,除非指定了特定的字符集(映射)(服务器端或内部 html 元标记)。这就是为什么我说它应该表示为 UTF-8。应该是,但不能假设,因为可能会指定不同的映射,并且在解码时必须考虑这一点。
-
@Sergey.quixoticaxis.Ivanov 我不把它当作一个论点,而是一个讨论。我很感激你指出我的描述不是那么清楚,所以我有机会尝试做一个更好的。而且我不认为自己是一个很好的解释者。我可能不是。所以,谢谢你的评论。
标签: c# html unicode webclient system.net