多语言文件 这版用csv格式存放, 自己用C#写辅助工具时,发现遇到各种问题。 (暂时没找开源库,如果有其实直接就行了)。
讲一讲遇到的几个坑吧:
1.csv 这边用 半角逗号, 间隔单元格, 所以如果文字中有半角, " 则这个单元格的数据前后会加上双引号 "",解析时要注意这个问题。
2. 然后又遇到一个问题, 最开始直接用StreamReader 的ReadLine()读取一行。 (它 遇到\r \n \r\n 都会结束)
windows中 一般\r\n作为换行符的。 但如果文字中有换行呢?
A. 结果有的单元格文字中 只有一个 \n(前后没有引号),
B.有的单元格中就是有\r\n的(这个单元格文字 就会有"")
这时 用ReadLine() 就不行了,需要自己写一个了:
char[] rbuf = new char[BUF_LEN];
string ReadCSVLine(StreamReader sr)
{
int index = 0;
bool quot = false; //是否有落单", 有则表示一行还没结束
while (index < BUF_LEN)
{
int r = sr.Read(rbuf, index, 1);
if(r == 0)
{
break;
}
if(rbuf[index] == '"')
{
quot = !quot; //遇到一个双引号取一次反,
}
if(rbuf[index] == '\n' && index > 0)
{
if(rbuf[index-1] == '\r')
{
//读到csv行尾了, 还要判断双引号是否落单
if (!quot) //双引号都是成双的,可以结束了
{
index--;
break;
}
}
}
index++;
}
return new string(rbuf,0,index);
}