一般情況下都是System.Text.Encoding.GetString(byte[] bytes)這樣的主要將byte[]轉換成string.而我遇到一个问题,我们的工业条码列印都是使用code soft软件设计样式,然後生成打印码文本文件,里面全是字符,我们以往的做法都是把文件以二进制数组方式存入db,然後在用的时候按unicode编码读出来,转换成string即可,现在只有一种叫intermec的打印机,它设计的打印码有图片,采用unicode编码读出来,图片无法打印,其它字体都是正常,然後我也试了其它各种编码进行转换,都失败了,用Delphi工具,采用以下语句是可以实现的,TBlobField.FieldByName('PrintCode').AsString, PrintCode是数据库二进制栏位,用Delphi这样实现可以打印图片,奇怪了,Delphi这样直接转换成string采用的是什麼编码规则,C#怎麼去实现?有沒有直接轉換成string的方法,關鍵是不知道那打印機的編碼規則,所以必須保持原有編碼規則,我猜想Delphi採用TBlobField就是保持了原有的編碼性.其它的打印機像斑馬打印機,設計出來有圖片的採用unicode讀出來可以打,而我們打印機資源有限,產線打印機都是拆東補西的,請各位看看,有什麼辦法可以解決。

解决方案 »

  1.   

    Delphi不太熟悉,一般把Byte[]转换为String,不是用Encoding就是Base64,Encoding要看编码,常用的有ASCII,GB2312,GBK,Unicode,还有UTF-8
      

  2.   

    說清除點,我將打印碼文件以二進制數組存儲到db中
    現在我利用
    System.Text.Encoding.Unicode
    System.Text.Encoding.Utf8
    System.Text.Encoding.Utf32
    System.Text.Encoding.ASCII
    System.Text.Encoding.Default
    不同的編碼方法將byte[]轉換成字符,傳送給條碼打印機,結果都是圖片無法打印出來,其它都正常
    而我們有一套舊系統是用delphi寫的,它就是採用TBlobField.FieldByName('二進制欄位').AsString
    方法將數據庫中二進制轉換成字符,傳送給條碼打印機,這樣就可以
    Delphi這樣這樣的轉換,是保持了什麼編碼規則進行轉換的,C#所有編碼規則都試了都失敗
      

  3.   

    下面是整理非常完整的string和byte[]的转换:           string和byte[]的转换 (C#)
      

  4.   

    C#开发显示条形码
    把条形码转成数据流存到数据库里(数据库里字段为image类型)再从数据库提出就是不乱码了我是打印到水晶报表上面的不知道你是不是??
      

  5.   

    ToString("2")不行
    刚才试了楼住呢行吗?
      

  6.   

    那楼主试试用旧的Delphi工具,打印机不要设置这个打印机,设置一个虚拟打印机,这样就可以生成一个虚拟的打印文件,比对一下这个byte[]和这个虚拟打印文件,就知道是什么形式转换的了
    一般安装了Office就可以生成一个虚拟打印机了
      

  7.   

    应该是byte[] data=数据库中读出的字节数组string st="";
    for(int i=0;i<data.Length;i++)
    {
       st+=data[i].ToString("X2");
    }st应该就是打印的字符了,看看行不行
      

  8.   

    string st="";
    for(int i=0;i<data.Length;i++)
    {
       st+=data[i].ToString("X2");
    }這個方法不行,這樣子所有打印碼字符全部轉換成了十六制,傳給機器根本沒動靜。我把二進制用FileStream生成文件保存到本地C:\123.txt,然後用Copy C:\123.txt Lpt1命令試一下,
    結果是圖片可以正常列印,然後我再用File讀取或StreamReader方法把文件中的字符讀出來傳給機器,
    結果也是圖片打印不了.
      在C#裡面,任何將二字進制數組變成字符都要使用編碼,
    像File.OpenText,還有各種流的讀取字符串的方法,要麼系統給定默認編碼,要麼自定義編碼,
    而我現在需要一個讀取方法,能像delphi的TBlobField.FieldByName('欄位').AsString
    一樣可以保持該文件原始編碼特性,用C#中定義的任何編碼都破壞了原有文件的編碼特性.
      

  9.   

    对于读出来的二进制数组, 使用BitConverter.ToChar(byte[] value,int startIndex) 按你存时的每字任字节数,依次读出,连在一块
      

  10.   

    对图片的二进制数组进行Base64编/解码
      

  11.   

    对于读出来的二进制数组, 使用BitConverter.ToChar(byte[] value,int startIndex) 按你存时的每字任字节数,依次读出,连在一块這個不行,讀出惡例全是亂碼
      

  12.   

    对图片的二进制数组进行Base64编/解码
    我現在把二進制數組用System.Text.Encoding.Default.GetString(byte[])
    獲取到的字符串送到打印機中都無法打印圖片
    如果進行Base64編碼成另一種字符,然後又解碼回來原始字符再傳送給機器, 
    這其實是拐了個彎,不起作用的,我原始讀出來都沒用,你加密解密也不會有作用
      
      

  13.   

    没有办法的办法:
    一个是写个简单的东西到数据库,然后看数据库的内容,判断编码;
    一个是监测输出到打印机的东西;看看c#和dephi之间的区别。