2013-06-26 17 views
-1

我想从csv读取数据,并把它放在下拉菜单中。该CSV是用北印度语字体(shusha.ttf)编写的。如何使用C#.net读取使用北印度语字体的CSV?

在阅读每一行时,我会看到垃圾值。

string sFileName = "C://MyFile.csv"; 
Assembly assem = Assembly.GetCallingAssembly(); 
FileStream[] fss = assem.GetFiles(); 
if (!File.Exists(sFileName)) 
{ 
    MessageBox.Show("Items File Not Present"); 
    return false; 
} 
StreamReader sr = new StreamReader(sFileName); 
string sItem = null; 
bool isFirstLine = true; 
do 
{ 
    sItem = sr.ReadLine(); 
    if (sItem != null) 
    { 
      string[] arrItems = sItem.Split(','); 
      if (!isFirstLine) 
      { 
       listItems.Add(arrItems[0]); 
      } 
      isFirstLine = false; 
    } 

} while (sItem != null); 
     return true; 
+2

甲CSV文件不能写入“以字体”。这是一个字符唯一的文件。你在谈论编码,对吧? –

+0

是的,这个文件是我在选择特定字体时写的。但是当我试图阅读它时,它只显示我英文字符。现在我无法将这些值显示回原始字体。有什么方法可以使用特定的字体在下拉菜单中显示值。 –

+1

无法以“字体”编写CSV文件。 CSV文件只是一个纯文本文件。文本文件中没有格式。也许它有助于更​​改组合框的字体? –

回答

1

你没有提供的编码参数设置为StreamReader的,所以它假设一个默认编码,是不是文件与书面的编码。

并非所有文本文件或csv文件都相同。编码系统选择如何将'字符'(字形,单词图片,字母等)转换为字节存储到计算机中。

有许多不同的编码系统 - ASCII,EBDIC,UTF8,UTF16,UTF32等

你需要找出哪些编码文件书面和传递的编码参数StreamReader类。

我本以为这个文件是用UTF8编写的,因为它是非英文文本的一个非常通用的标准; StreamReader的默认值是在你不提供值时使用UTF8,所以它可能不是utf8。这可能是UTF16,或者甚至可能是其他一些完全不同的编码。

对于想要在Unicode上有一些背景的好奇者 - unicode是一个标准,它将简单的数字赋予字形,范围形式ascii,雪人到普通话等.Unicode只给每个字形一个数字,称为代码点。然而,Unicode不是一种编码 - 它没有说如何实际将这些代码点表示为字节。

UTF8是一种unicode编码,可以覆盖整个unicode空间,就像UTF16和UTF32一样。 UTF8为低于特定值的代码点写入1个字节,为低于某个较高值的代码点写入2个字节等等,并且在每个字节中使用信令位来帮助指示代码点是否使用一个,两个,三个等字节。在内部,例如,C#代表使用UTF16的字符串,这就是为什么如果您查看仅包含ascii文本的字符串的原始内存,您会看到很多'0'值 - ascii不需要其他值8位,所以该值最终被全部为0

下面是从维基百科的链接,解释UTF8如何打包比特从码点值,与信令位,成字节中的存储器来存储:https://en.wikipedia.org/wiki/UTF-8