为什么用html代码代替带重音符号的代码无法正常工作?

问题描述 投票:0回答:2

我想用相应的HTML代码(例如á,ñ,¿,¡等)替换带重音的字符(例如á,ñ,¿,¡等)。

例如,这行文字:

[[不可能给我留下深刻的印象,再给卡瓦列罗·特里劳尼博士,Livesey y otros muchosseñoresme医生

...应成为:

[[我不可能在á时对我进行复审,而在Liveball y ot uchos muchos博士señores中]]

这应该很简单。我有这段代码可以尝试:

private void buttonReplaceCharsWithCodes_Click(object sender, EventArgs e) { String fallName = String.Empty; List<String> linesModified = new List<string>(); StreamReader file = null; try // finally { try // catch { DialogResult result = openFileDialog1.ShowDialog(); if (result == DialogResult.OK) { fallName = openFileDialog1.FileName; } file = new StreamReader(fallName); String line; while ((line = file.ReadLine()) != null) { linesModified.Add(line); } progressBar1.Maximum = linesModified.Count; progressBar1.Value = 0; labelProgFeedback.Text = "Replacing accented chars with HTML codes"; for (int i = 0; i < linesModified.Count; i++) { linesModified[i] = linesModified[i].Replace("á", "&aacute;"); linesModified[i] = linesModified[i].Replace("Á", "&Aacute;"); linesModified[i] = linesModified[i].Replace("é", "&eacute;"); linesModified[i] = linesModified[i].Replace("É", "&Eacute;"); linesModified[i] = linesModified[i].Replace("í", "&iacute;"); linesModified[i] = linesModified[i].Replace("Í", "&Iacute;"); linesModified[i] = linesModified[i].Replace("ñ", "&ntilde;"); linesModified[i] = linesModified[i].Replace("Ñ", "&Ntilde;"); linesModified[i] = linesModified[i].Replace("ó", "&oacute;"); linesModified[i] = linesModified[i].Replace("Ó", "&Oacute;"); linesModified[i] = linesModified[i].Replace("ú", "&uacute;"); linesModified[i] = linesModified[i].Replace("Ú", "&Uacute;"); linesModified[i] = linesModified[i].Replace("ü", "&uuml;"); linesModified[i] = linesModified[i].Replace("Ü", "&Uuml;"); linesModified[i] = linesModified[i].Replace("¿", "&iquest;"); linesModified[i] = linesModified[i].Replace("¡", "&iexcl;"); progressBar1.PerformStep(); } progressBar1.Value = 0; } catch (Exception ex) { MessageBox.Show(String.Format("Exception {0}", ex.Message)); } } finally { String massagedFileName = String.Format("{0}_Massaged.txt", fallName); File.WriteAllLines(massagedFileName, linesModified); file.Close(); } }

很遗憾,它不起作用。它用“这到底是什么?!?”代替重音字符。符号(�)代替所需的HTML代码。要使它正常工作需要什么?

更新

回答评论,这是我加载的文件的内容:

我不可能在卡瓦列罗·特里劳尼(Caballero Trelawney)死后复活,在Livesey y otros muchosseñoresme han历史悠久的西班牙历史和历史Isla del Tesoro。 Voy,pues,áponer manosála obracontándolotodo,des de el ,hasta el ,sin dejarme cosa alguna en el tintero,de la deuando ladeterminacióngeográficade la伊斯拉·伊斯坦·索拉曼特岛todavíaun tesoro no descubierto。感恩之歌17-y retrocedo hasta laépocaen que mi padreteníaaúnla posadadel“

Almirante Benbow

,”和prima vez一起使用llegóáalojarse en ella aquel viejo marino de tez布龙达达和库尔蒂达por los elementos,确保您可以看到cicatriz。

...这是它与替换文件一起保存的文件:不可能我有sido rehusarme�lasrepetidas instancias que elCaballero Trelawney,《 Livesey y otros muchos医生》让我感到震惊历史悠久的西班牙历史和历史Isla del Tesoro。 Voy,pues,poner manos,la obra cont.ndolo todo,desde el hasta el ,萨尔·德哈尔姆·科萨·阿尔古纳·恩·埃尔·特内罗,除了确定性地理伊斯拉·伊斯坦·索拉曼特岛不得随意使用。感恩之歌17-y retrocedo hasta la``poca en que mi padre ten.a a.n a posadadel“ [Almirante Benbow

,”)lleg��alojarse en ella aquel viejo marino de tez布隆塞达和库蒂达por los elementos,确保您可以看到cicatriz。

IOW,替换没有发生-我只是看到“神秘”字符而不是HTML代码。

当我单步执行代码并检查“ linesModified”的各行时,我在运行时看到相同的东西(我看到了。)。我猜比看星星要好。

这是过程:这是一个简单的工具,在其中单击按钮以打开(.txt)文件。处理后,它将文件的新版本保存到新文件。更新2

由于可以将其显式保存为UTF8,所以我认为也许在读取文件时这样做可能是有利的,但这:
while ((line = file.ReadLine(ASCIIEncoding.UTF8)) != null)

...不编译,表示没有带1个参数的ReadLine方法没有重载。

我想用相应的HTML代码(例如á,ñ,¿,¡等)替换带重音的字符(例如á,ñ,¿,¡等)。例如,以下文本行:Imposible me ha ...

<<<<

我唯一想到的是在写文件时特别指定您的编码,例如:

File.WriteAllLines(massagedFileName, linesModified, Encoding.UTF8);

c# html winforms diacritics non-ascii-characters
2个回答
1
投票
file = new StreamReader(fallName, Encoding.Default, true);

0
投票
Almirante Benbow,”和d&iacute;a en quepor primea vez lleg&oacute;&aacute;马里诺·德·特斯·布龙萨达和库尔斯蒂达·波洛斯·元素奥斯可见的cicatriz。
© www.soinside.com 2019 - 2024. All rights reserved.