2013-12-11 39 views
0

好吧,我不知道如何来解释这一点,但看看这个方法:创建充当宏

string fornavn = borgerXML.GetElementsByTagName("Fornavne")[id].InnerXml 

说我有这些字符串,它们都可以从不同的元素4 XML文件。 在这些每一个,我要做到以下几点:

  .Replace("æ", "æ") 
      .Replace("Ã?", "Æ") 
      .Replace("ø", "ø") 
      .Replace("Ã?", "Ø") 
      .Replace("Ã¥", "å") 
      .Replace("Ã?", "Å"); 

如果我可以存储这些6行代码的方法什么的,我只需要粘贴的每一个方法这4个字符串元素,而不是粘贴4行6行代码。

有没有办法做到这一点?

在此先感谢。

+0

你有没有考虑读取文件与正确的编码,而不是从读取该文件与错误的编码处理错位的角色?尝试在读取文件时指定UTF-8编码。 –

+0

是的,我几周前问过我的老师,但他不知道如何。 这可能吗? 但我也想知道这个问题的答案,因为它会非常方便。 –

+0

你可以显示代码在哪里阅读XML,基本上'borgerXML'从哪里获得价值? –

回答

1

这里的实际问题是,文件,根据您的意见,规定了它使用的是ISO-8859-1编码编码:

<?xml version="1.0" encoding="iso-8859-1"?> 

事实上并不匹配的编码,试试这个与LINQPad

void Main() 
{ 
    string wrong = "æ ø å"; 
    var bytes = Encoding.GetEncoding("iso-8859-1").GetBytes(wrong); 
    string correct = Encoding.UTF8.GetString(bytes); 
    correct.Dump(); 
} 

这将输出:

æ ø å 

(请注意,我只用了每个第二个字母,因为您在问题中发布的字符与它们实际编码的方式不完全匹配)。

要修复此问题,请返回生成该文件的代码,并确保在编写文件时使用iso-8859-1编码,而不是UTF-8。

0

public string Convert(string source) 
{ 
return source.Replace("æ", "æ") 
      .Replace("Ã?", "Æ") 
      .Replace("ø", "ø") 
      .Replace("Ã?", "Ø") 
      .Replace("Ã¥", "å") 
      .Replace("Ã?", "Å"); 
} 

如果我给你正确的答复。每串要“过程”叫

Convert(value); 
+0

这就是我所要求的,所以即使修复编码是正确的,这仍然是我所要求的。 所以我会接受这个答案以供将来参考,但我会尝试修复编码。 –

+1

伟大的,如果这可以帮助你 – realnero

+0

至少修复代码中的错误,如缺少'{',虽然这回答你的问题(你问的那个)这是你的实际问题的错误解决方案(用于XML的错误编码文件)。 –

0

我借用了一下从这里Regex Replace - Multiple Characters(实际上你会使用搜索功能找到这个自己),使之成为更通用的解决方案,你可以使用更多或更少的字符:

  1. 定义可以动态替换功能:

    string MultiReplace(string original, Dictionary<string, string> replacements) 
    { 
        //initialize result with original in case no replacements have been requested 
        string result = original; 
    
        foreach (var r in replacements) 
        { 
         result = result.Replace(r.Key, r.Value); 
        } 
    
        return result; 
    } 
    
  2. 定义多用变量保存每一次创建它的开销,你需要:

    //You can create & initialize a dictionary variable like this: 
    var charmap = new Dictionary<string, string> 
    { 
        { "æ", "æ" }, 
        { "Ã?", "Æ" }, 
        { "ø", "ø" }, 
        { "Ã?", "Ø" }, 
        { "Ã¥", "å" }, 
        { "Ã?", "Å" }, 
    }; 
    
  3. 调用此函数与您的特定任务:

    var a = MultiReplace(fornavn, charmap); 
    

一般而言,应该是可能的,虽然解决这个问题上的XML水平。

BR弗洛里安