我的access数据库里有一列是备注,这里有的行插入字符串有用gbk的,有的行有用unicode的,有用big-unicode,也有用utf8的,我需要把这一列取出来写对应编码的文本文件。当时读入的时候是判断的bom,但是在数据库里读出来的是string,怎么判断是什么编码呢。

解决方案 »

  1.   

    这么多编码方式,你如何存入的,如果是通过程序存入的话,string类型在存之前会自动转。
      

  2.   

    回渔翁,存入的时候我是这样的,用filestream读取txt到一个byte[] bt,判断前3个字节bom,如果是头2个是0xff 0xfe,就string s=encoding.unicode.getstring(bt),如果是0xfe 0xff就string s=encoding.BigEndianUnicode.GetString(bt),如果是0xef 0xbb 0xbf,就string s=encoding.utf8.getstring(bt),这样把string存入access的备注(文本类型)字段,打开数据库看表里字段是没有问题的,但是如果想从数据库里读出写入文件就出问题了,因为读出的是string,并不知道编码格式,也没法把string换成字节数组读前3个字节,如果硬是把byte[] bt=encoding.default.getbytes(s),然后filestream写入txt文件,如果当初是unicode/bigunicode/utf-8格式的,打开全是乱码。无奈我只好多用一个字段存储编码格式信息,但是不想这样做还是想在数据库里读出string的时候就能判断出编码格式。
      

  3.   

    如果你存的是文件内容,那我建议你用ole字段来替换备注,然后直接存byte[]数据。ref:
    http://blog.csdn.net/knight94/archive/2006/03/24/637800.aspx
      

  4.   

    回渔翁,那样不行啊,因为我是用的数据集,存string还得有操作呢,比如修改什么的,不是光存储。
      

  5.   

    to 那样不行啊,因为我是用的数据集,存string还得有操作呢,比如修改什么的,不是光存储ole类型数据也可以进行操作,例如修改等等,都是可以的。
      

  6.   

    那么现不说这问题,一个string如何变成字节数组呢。