日期:2014-05-17  浏览次数:20877 次

PDF417条码加入中文
最近写PDF417二维条码,在网上下了开源代码,有两个文件:Pdf417lib.cs和SupportClass.cs文件,是老外写的,不过不支持中文。
网上提供一个方法,将方法:
C# code

    internal protected sbyte[] Filter(string sValue) 
    { 
        sbyte []sArray = new sbyte[300]; 
 
        try 
        { 
            Char [] cArray = sValue.ToCharArray(); 
                 
            for(int k = 0; k < cArray.Length; k++) 
            { 
                sArray[k] = Convert.ToSByte(cArray[k]); 
            } 
 
            return sArray; 
        } 
        catch(Exception e) 
        { 
            //MessageBox.Show(e.Message, "Error", 
            //    MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
            return null; 
        } 
    }



改为:
C# code

        internal protected byte[] Filter( string sValue )
        {
            //如果Utf8不行就换成Unicode,记不清到底用哪种编码了
            byte[] sArray = System.Text.Encoding.UTF8.GetBytes( sValue );

            return sArray;
        }


然后将相关数据类型由sbyte改成byte,或者你将该方法返回值转换成sbyte[] 

我按照上面提示进行修改,遇到提示,无法将类型“byte[]”隐式转换为“sbyte[]”,于是在方法Filter()中,将方法返回值转换为sbyte[]。
C# code

        internal protected sbyte[] Filter(string sValue)
        {
            
            byte[] sArray = System.Text.Encoding.Unicode.GetBytes(sValue);

            //将byte[]类型转换为sbyte[]类型
            sbyte[] mySByte = new sbyte[sArray.Length];

            for (int i = 0; i < sArray.Length; i++)
            {
                if (sArray[i] > 127)
                    mySByte[i] = (sbyte)(sArray[i] - 256);
                else
                    mySByte[i] = (sbyte)sArray[i];
            }

            return mySByte;           
        }


但是打出来的二维条码图片,扫描出来是乱码。请问,谁有类似的解决经验吗?

------解决方案--------------------
sbyte: -128~127
byte: 0~255
------解决方案--------------------
bye -> sbye 不是少了一截么?

byte[] sArray = System.Text.Encoding.Unicode.GetBytes("嘿嘿");
string str =System.Text.Encoding.UTF8.GetString(sArray);

str = ?V?V
介个不是中文吧……