字符串:ESPRINET IBÉRICA S.L.U.在SQL Server2008里面计算长度是23个字符,select LEN('ESPRINET IBÉRICA S.L.U.')在C#里面计算也是23个字符:
int len = System.Text.Encoding.Default.GetByteCount("ESPRINET IBÉRICA S.L.U.");VB中亦是如此,23:
Len(Trim(("ESPRINET IBÉRICA S.L.U.")但是实际上是24个字符,因为欧文É要占到两位,在Notepad++和Ultraedit都显示的是24个字符。
请教高人如何在C#和VB中计算到正确的字符数24个。

解决方案 »

  1.   

    字符编码改成 utf-8 就行
      

  2.   

    这个 换成二进制 或者 加码
    例如
    string  xx  =Server.UrlEncode( usname);
    再计算程度
    解   Server.UrlDecode
      

  3.   

    (2) 在Program.cs文件的顶部添加下面的using指令: using System;using System.Collections.Generic;using System.Text;using System.IO;(3) 在Main()方法中添加下面的代码:static void Main(string[] args){byte[] byData = new byte[100];char[] charData = new Char[100];
    try{FileStream aFile = new FileStream("../../Program.cs",FileMode.Open);aFile.Seek(135,SeekOrigin.Begin);aFile.Read(byData,0,200);}catch(IOException e){Console.WriteLine("An IO exception has been thrown!");Console.WriteLine(e.ToString());Console.ReadKey();return;}
    Decoder d = Encoding.UTF8.GetDecoder();d.GetChars(byData, 0, byData.Length, charData, 0);
    Console.WriteLine(charData);Console.ReadKey();}
      

  4.   

    我得到的是24个字符 byte[] b = System.Text.Encoding.Default.GetBytes("ESPRINET IBÉRICA S.L.U.");
      

  5.   


    Console.WriteLine(System.Text.Encoding.UTF8.GetByteCount("ESPRINET IBÉRICA S.L.U."));楼主的计算机环境可能默认字符集是别的吧
    int len = System.Text.Encoding.Default.GetByteCount("ESPRINET IBÉRICA S.L.U.");在我这里也是24
      

  6.   

    我想原因是这样的,在vs当中,默认的情况是unicode或者utf-8的格式。如果你把“'ESPRINET IBÉRICA S.L.U.” 粘贴到其他的文本软件当中,可能会出现编码格式的改变。或者那个文本软件不能识别当前字符,所以才会出现与vs字符不一样的问题。尝试一下调整相同的编码格式文本。再试验一下。
      

  7.   

    明白了,用UTF8的编码就可以.还是要请教的是:在VB中使用哪个函数呢,StrConv()不行,没有UTF8的编码格式.
      

  8.   

            Dim bytes As Byte() = System.Text.Encoding.Default.GetBytes(你的字符串)
            Dim bytes2 As Byte() = System.Text.Encoding.Convert(System.Text.Encoding.Default, System.Text.Encoding.UTF8, bytes)
            'bytes2.Length就是长度()
            Dim result As String = System.Text.Encoding.UTF8.GetString(bytes2)
            'result就是转换后的()
      

  9.   

    Dim bytes As Byte() = System.Text.Encoding.Default.GetBytes(你的字符串)
            Dim bytes2 As Byte() = System.Text.Encoding.Convert(System.Text.Encoding.Default, System.Text.Encoding.UTF8, bytes)
            'bytes2.Length就是长度()
            Dim result As String = System.Text.Encoding.UTF8.GetString(bytes2)
            'result就是转换后的()