我有一个C#例程,它从CSV文件导入数据,将其与数据库匹配,然后将其重写为文件.源文件似乎有一些非ASCII字符,这些字符会污染处理程序.
我已经有一个静态方法,我运行每个输入字段,但它执行基本检查,如删除逗号和引号.有谁知道如何添加删除非ASCII字符的功能?
我正在阅读各种格式和语言的文件,我目前正在使用一个小编码库来尝试检测正确的编码(http://www.codeproject.com/KB/recipes/DetectEncoding.aspx).
这很不错,但偶尔也会错过.(多语言文件)
我的大多数潜在用户对编码的理解很少(我希望最好的是"它与字符有关")并且不太可能在列表中选择正确的编码,所以我想让他们循环通过不同的编码,直到找到正确的编码只需点击一个按钮.
显示问题?点击这里尝试不同的编码!(那就是这个概念)
实现类似的东西最好的方法是什么?
编辑:看起来我没有表达得足够清楚.通过"循环编码",我不是指"如何循环编码?"
我的意思是"如何让用户按顺序尝试不同的编码而不重新加载文件?"
这个想法更像是这样的:假设文件加载了错误的编码.显示一些奇怪的字符.用户将单击"下一编码"或"先前编码"按钮,并且将以不同的编码转换该字符串.用户只需要一直点击,直到找到正确的编码.(无论哪种编码看起来对用户有用都会很好).只要用户可以点击"下一步",他就有合理的机会解决他的问题.
我到目前为止所发现的涉及使用当前编码将字符串转换为字节,然后将字节转换为下一个编码,将这些字节转换为字符,然后将字符串转换为字符串......可行,但我想知道是否存在这是一种更简单的方法.
例如,如果有一个方法可以读取字符串并使用不同的编码返回它,例如"render(string,encoding)".
非常感谢您的回答!
我在.NET中使用StreamReader类,如下所示:
using( StreamReader reader = new StreamReader( "c:\somefile.html", true ) {
string filetext = reader.ReadToEnd();
}
Run Code Online (Sandbox Code Playgroud)
当文件有BOM时,这可以正常工作.我遇到了没有BOM的文件的麻烦..基本上我得到了胡言乱语.当我指定Encoding.Unicode它工作正常,例如:
using( StreamReader reader = new StreamReader( "c:\somefile.html", Encoding.Unicode, false ) {
string filetext = reader.ReadToEnd();
}
Run Code Online (Sandbox Code Playgroud)
所以,我需要将文件内容转换为字符串.那么人们通常如何处理这个呢?我知道没有解决方案可以100%的时间工作,但我想提高我的赔率..显然有那些试图猜测的软件(例如,记事本,浏览器等)..NET框架中是否有一种方法可以猜测我?有没有人有他们想分享的代码?
更多背景:这个问题和我的问题差不多,但我在.NET领域.这个问题让我进入了一个列出各种编码检测库的博客,但没有一个在.NET中
我正在创建一个将输入字符串发送到移动设备的应用程序.某些设备在编码特殊字符时遇到问题,因此我想创建一个不允许PC上的用户输入特殊字符的过滤器.
该应用程序是用C#(.NET 3.5)编写的,我想将一个方法附加到按键事件.伪代码如下:
private void checkTextBoxContent(TextBox txtEntry)
{
if(txtEntry.Text contains non-ASCII sign)
{
show messageBox;
remove the last entered character;
}
}
Run Code Online (Sandbox Code Playgroud)
有没有人知道是否有任何检测ASCII /非ASCII符号的现有方法,以便可以在条件中使用
txtEntry.Text包含非ASCII符号?
谢谢!
我有一个编码问题.我的MongoDB中有错误编码的文本.我的数据库中文本的源文件以ISO-8859-1编码.现在,在我的数据库中查看它时,一些字符被打破(变成' ').
目前,在从db检索文本时,我尝试了以下代码.
var t = Collection.FindOne(Query.EQ("id", "2014121500892"));
string message = t["b203"].AsString;
Console.WriteLine(ChangeEncoding(message));
Run Code Online (Sandbox Code Playgroud)
static string ChangeEncoding(string message)
{
System.Text.Encoding srcEnc = System.Text.Encoding.GetEncoding("ISO-8859-1");
System.Text.Encoding destEnc = System.Text.Encoding.GetEncoding("UTF-8");
byte[] bData = srcEnc.GetBytes(message);
byte[] bResult = System.Text.Encoding.Convert(srcEnc, destEnc, bData);
return destEnc.GetString(bResult);
}
Run Code Online (Sandbox Code Playgroud)
static string ChangeEncoding(string message)
{
File.WriteAllText("text.txt", message, Encoding.GetEncoding("ISO-8859-1"));
return File.ReadAllText("text.txt");
}
Run Code Online (Sandbox Code Playgroud)
db中的示例文本:
Box aus Pappef rA8-Lernk rtchen
我希望能够在控制台中将其打印为:
Box ausPappefürA8-Lernkärtchen