C#学习教程:在C#中替换字符(ascii)我需要做的是用普通字符替换这些字符,例如:à=a、è=e等……这是我目前的代码:StreamWritersw=newStreamWriter(@"C:/JoinerOutput.csv");字符串路径=@"C:/Joiner.csv";字符串行=File.ReadAllText(path);如果(line.Contains("à")){stringasAscii=Encoding.ASCII.GetString(Encoding.Convert(Encoding.UTF8,Encoding.GetEncoding(Encoding.ASCII.EncodingName,newEncoderReplacementFallback("a"),newDecoderExceptionFallback()),编码.UTF8.GetBytes(行)));Console.WriteLine(asAscii);控制台.ReadLine();sw.WriteLine(asAscii);sw.冲洗();基本上这会在文件中搜索特定字符并将其替换为另一个字符。我遇到的问题是我的if语句不起作用。HowcanIsolvethisproblem?这是输入文件的示例:DimàkàtsoMokgàloMàmàRàtlàdiKoosNèlPàsèkàModisèJèrèmiàhMorèmiKhèthiwèButhèlèziTiànàPillàyViviànMàswàngànyèThirèshànRèddyWàdèCornèliusènosNètshimbupfè如果使用,则输出为:line=line.Replace(’à’,’a’);:Ch???rl????n????Kirst????nM????m????R????tl????diKoosN????lP????s????k????Modis????J????r????mi????hMor????miKh????thiw????Buth????l????ziPī???Vivi????nM????sw????ng????ny????ThshshRRRRRRRRRRRddddW????d????Corn????lius????nosN????tshimbupf????Withmycode,thesymbolwillbecompletelyremovedDon'tknowifit'susefulbutinaninternaltooltowritethemessageontheledscreenwehavethefollowingreplacement(I'msuretherearesmarterwaystomakethisworkforunicodetables,butthissufficeforthissmallinternaltool):strMessage=Regex.Replace(strMessage,"[éè?êe]","e");strMessage=Regex.Replace(strMessage,"[éè?ê]","E");strMessage=Regex.Replace(strMessage,"[àa?]","a");strMessage=Regex.Replace(strMessage,"[àá????]","A");strMessage=Regex.Replace(strMessage,"[àáa???]","a");strMessage=Regex.Replace(strMessage,"[ùú?ü]","U");strMessage=Regex.Replace(strMessage,"[ùú?üμ]","u");strMessage=Regex.Replace(strMessage,"[òó????]","o");strMessage=Regex.Replace(strMessage,"[òó????]","O");strMessage=Regex.Replace(strMessage,"[ìí??]","i");strMessage=Regex.Replace(strMessage,"[ìí?]","I");strMessage=Regex.Replace(strMessage,"[?]","s");strMessage=Regex.Replace(strMessage,"[?]","S");strMessage=Regex.Replace(strMessage,"[?]","n");strMessage=Regex.Replace(strMessage,"[?]","N");strMessage=Regex.Replace(strMessage,"[?]","c");strMessage=Regex.Replace(strMessage,"[?]","C");strMessage=Regex.Replace(strMessage,"[?]","y");strMessage=Regex.Replace(strMessage,"[Y]","Y");strMessage=Regex.Replace(strMessage,"[?]","z");strMessage=Regex.Replace(strMessage,"[?]","Z");strMessage=Regex.Replace(strMessage,"[D]","D");strMessage=Regex.Replace(strMessage,"[-]","oe");strMessage=Regex.Replace(strMessage,"[?]","Oe");压力age=Regex.Replace(strMessage,"[??u201Cu201Du201Eu201Fu2033u2036]",""");strMessage=Regex.Replace(strMessage,"[u2026]","...");在大多数语言中,文本是经过这样的处理后仍然可以理解,但并非总是如此,并且经常迫使读者参考句子的上下文以便能够理解它,而不是如果你有选择的话你想要的东西。注意,正确的解决方案是使用unicode表,用“组合变音符号”替换字符+带有集成变音符号的字符形式,然后删除变音符号......其他人评论使用Unicode查找表删除变音符号。我快速谷歌搜索并找到了这个例子。代码是无耻地复制,(重新格式化),并在下面发布:使用系统;使用System.Text;使用System.Globalization;publicstaticclassRemove{);StringBuildersb=newStringBuilder();for(intich=0;ich所以你的代码可以通过调用来清理输入:line=Remove.RemoveDiacritics(line);我经常使用基于Dana的版本提供的扩展方法。快速解释:代码:usingSystem.Linq;使用系统文本;使用System.Globalization;//这里的命名空间publicstaticclassUtility{publicstaticstringRemoveDiacritics(thisstringstr){if(str==null)returnnull;varchars=fromcinstr.Normalize(NormalizationForm.FormD).ToCharArray()让uc=CharUnicodeInfo.GetUnicodeCategory(c)whereuc!=UnicodeCategory.NonSpacingMarkselectc;varcleanStr=newstring(chars.ToArray()).Normalize(NormalizationForm.FormC);返回cleanStr;你为什么让事情复杂化?line=line.Replace('à','a');更新:File.ReadAllText的文档说:此方法尝试根据字节顺序标记的存在自动检测文件的编码。可以检测编码格式UTF-8和UTF-32(big-endian和little-endian)。读取可能包含导入文本的文件时,请使用ReadAllText(String,Encoding)方法重载,因为可能无法正确读取无法识别的字符。C:/Joiner.csv是什么编码?也许您应该在自己指定输入编码的地方使用File.ReadAllText的其他重载?使用这个:if(line.Contains("OldChar")){line=line.Replace("OldChar","NewChar");这样做很简单。下面的代码将在2行代码中将所有特殊字符替换为ASCII字符。它为您提供与JulienRoncaglia解决方案相同的结果。byte[]bytes=System.Text.Encoding.GetEncoding("西里尔文").GetBytes(inputText);字符串outputText=System.Text.Encoding.ASCII.GetString(bytes);听起来您想要做的是将扩展的ASCII(8位)转换为ASCII(7位)-因此搜索它可能会有所帮助。我见过用其他语言执行此操作的库,但从未在C#中看到过,这看起来有点启发:将两个ascii字符转换为它们“对应的”一个字符Extendedasciirepresentation以上是C#学习教程:替换C#中的字符(ascii)分享的所有内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注---本文收集自网络,不代表正文位置。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
