js提取中文首字母在C#里应该如何实现???

时间:2023-01-31 08:04:12
今天在截取某网站页面,该网站页面字体为中文,截取回来后发现中文变为下面形式来表示:
"\u57c3\u6328\u54ce\u5509\u54c0\u7691\u764c\u853c\u77ee\u827e\u788d\u7231\u9698\u8bf6"

在网上查了下资料,发现这在JS里叫提取中文首字母的转换方式,看了很多例子都是JS的,所以一直都没有看懂例子,不知道该如何把这些东西转换回中文...

如果有做过的朋友,希望能够帖贴C#版本的核心转换代码~~~

以下连接是我找到JS代码的其中一例子,懂JS的朋友希望帮忙看看...
http://www.javaeye.com/topic/442364

9 个解决方案

#1


那你直接截取字符串得了..干嘛还要截取字符编码

#2


看错了..不好意思!!!不懂!

#3


///   汉字转拼音缩写   
    
  ///   Code   By   MuseStudio@hotmail.com   
    
  ///   2004-11-30   
    
  ///   </summary>   
    
  ///   <param   name="str">要转换的汉字字符串</param>   
    
  ///   <returns>拼音缩写</returns>   
    
  public   static   string   GetPYString(string   str)   
    
  {   
    
  string   tempStr   =   "";   
    
  foreach(char   c   in   str)   
    
  {   
    
  if((int)c   >=   33   &&   (int)c   <=126)   
    
  {//字母和符号原样保留   
    
  tempStr   +=   c.ToString();   
    
  }   
    
  else   
    
  {//累加拼音声母   
    
  tempStr   +=   GetPYChar(c.ToString());   
    
  }   
    
  }   
    
  return   tempStr;   
    
  }   
    
      
    
  ///   <summary>   
    
  ///   取单个字符的拼音声母   
    
  ///   Code   By   MuseStudio@hotmail.com   
    
  ///   2004-11-30   
    
  ///   </summary>   
    
  ///   <param   name="c">要转换的单个汉字</param>   
    
  ///   <returns>拼音声母</returns>   
    
  public   static   string   GetPYChar(string   c)   
    
  {   
    
  byte[]   array   =   new   byte[2];   
    
  array   =   System.Text.Encoding.Default.GetBytes(c);   
    
  int   i   =   (short)(array[0]   -   '\0')   *   256   +   ((short)(array[1]   -   '\0'));   
    
      
    
  if   (   i   <   0xB0A1)   return   "*";   
    
  if   (   i   <   0xB0C5)   return   "a";   
    
  if   (   i   <   0xB2C1)   return   "b";   
    
  if   (   i   <   0xB4EE)   return   "c";   
    
  if   (   i   <   0xB6EA)   return   "d";   
    
  if   (   i   <   0xB7A2)   return   "e";   
    
  if   (   i   <   0xB8C1)   return   "f";   
    
  if   (   i   <   0xB9FE)   return   "g";   
    
  if   (   i   <   0xBBF7)   return   "h";   
    
  if   (   i   <   0xBFA6)   return   "g";   
    
  if   (   i   <   0xC0AC)   return   "k";   
    
  if   (   i   <   0xC2E8)   return   "l";   
    
  if   (   i   <   0xC4C3)   return   "m";   
    
  if   (   i   <   0xC5B6)   return   "n";   
    
  if   (   i   <   0xC5BE)   return   "o";   
    
  if   (   i   <   0xC6DA)   return   "p";   
    
  if   (   i   <   0xC8BB)   return   "q";   
    
  if   (   i   <   0xC8F6)   return   "r";   
    
  if   (   i   <   0xCBFA)   return   "s";   
    
  if   (   i   <   0xCDDA)   return   "t";   
    
  if   (   i   <   0xCEF4)   return   "w";   
    
  if   (   i   <   0xD1B9)   return   "x";   
    
  if   (   i   <   0xD4D1)   return   "y";   
    
  if   (   i   <   0xD7FA)   return   "z";   
    
      
    
  return   "*";   
    
  }

#4


非常感谢wjq的回答...但我要的是"\u57c3\u6328\u54ce\u5509\u54c0\u7691\u764c\u853c\u77ee\u827e\u788d\u7231\u9698\u8bf6"这些转换回中文,而不是汉字取首字母!!

#5


根据\u分割字符串,取得后面的16进制数字,每2个字符一组,转为10进制写入byte[]中。
然后System.Text.Encoding.Unicode.GetString把byte[]转为字符串。

简单的办法。你构建一个html,<html><body>\u57c3\u6328\u54ce\u5509\u54c0\u7691\u764c\u853c\u77ee\u827e\u788d\u7231\u9698\u8bf6</body></html>
然后写入一个WebBrowse浏览器控件。然后取document.innerText就行了~~让ie帮你转。

#6


引用 5 楼 wjq 的回复:
根据\u分割字符串,取得后面的16进制数字,每2个字符一组,转为10进制写入byte[]中。
然后System.Text.Encoding.Unicode.GetString把byte[]转为字符串。

简单的办法。你构建一个html, <html> <body>\u57c3\u6328\u54ce\u5509\u54c0\u7691\u764c\u853c\u77ee\u827e\u788d\u7231\u9698\u8bf6 </body> </html>
然后写入一个WebBrowse浏览器控件。然后取document.innerText就行了~~让ie帮你转。
汗...那是JS特有的字符串表达方式.你这么写在html里没用的.

#7


using System;
using System.Text;
using System.Globalization;
class test{
static string jsstr = @"\u6709\u4e2a\u9884\u7ea6\u7b49\u5f85\u9662\u957f\u5230\u6765";
static string getJSStr (string js){
var codes = js.Split (new string[]{@"\u"},StringSplitOptions.RemoveEmptyEntries);
char[] chars = new char[codes.Length];
for (int i = 0;i<codes.Length;++i){
chars[i] = (char)int.Parse (codes[i],NumberStyles.AllowHexSpecifier);
}
return new String (chars);
}
static void Main (){

Console.Write (getJSStr (jsstr));
}
}

做了一小段程序,经验证能成功转.不过对源字串要求比较严格,必须全部是\uxxxx的格式.中间不能有其它字
符;否则会出错.要支持内部有其它字符的会比较麻烦,如果需要LZ再另外说明吧.

#8


学习 

#9


学习

#1


那你直接截取字符串得了..干嘛还要截取字符编码

#2


看错了..不好意思!!!不懂!

#3


///   汉字转拼音缩写   
    
  ///   Code   By   MuseStudio@hotmail.com   
    
  ///   2004-11-30   
    
  ///   </summary>   
    
  ///   <param   name="str">要转换的汉字字符串</param>   
    
  ///   <returns>拼音缩写</returns>   
    
  public   static   string   GetPYString(string   str)   
    
  {   
    
  string   tempStr   =   "";   
    
  foreach(char   c   in   str)   
    
  {   
    
  if((int)c   >=   33   &&   (int)c   <=126)   
    
  {//字母和符号原样保留   
    
  tempStr   +=   c.ToString();   
    
  }   
    
  else   
    
  {//累加拼音声母   
    
  tempStr   +=   GetPYChar(c.ToString());   
    
  }   
    
  }   
    
  return   tempStr;   
    
  }   
    
      
    
  ///   <summary>   
    
  ///   取单个字符的拼音声母   
    
  ///   Code   By   MuseStudio@hotmail.com   
    
  ///   2004-11-30   
    
  ///   </summary>   
    
  ///   <param   name="c">要转换的单个汉字</param>   
    
  ///   <returns>拼音声母</returns>   
    
  public   static   string   GetPYChar(string   c)   
    
  {   
    
  byte[]   array   =   new   byte[2];   
    
  array   =   System.Text.Encoding.Default.GetBytes(c);   
    
  int   i   =   (short)(array[0]   -   '\0')   *   256   +   ((short)(array[1]   -   '\0'));   
    
      
    
  if   (   i   <   0xB0A1)   return   "*";   
    
  if   (   i   <   0xB0C5)   return   "a";   
    
  if   (   i   <   0xB2C1)   return   "b";   
    
  if   (   i   <   0xB4EE)   return   "c";   
    
  if   (   i   <   0xB6EA)   return   "d";   
    
  if   (   i   <   0xB7A2)   return   "e";   
    
  if   (   i   <   0xB8C1)   return   "f";   
    
  if   (   i   <   0xB9FE)   return   "g";   
    
  if   (   i   <   0xBBF7)   return   "h";   
    
  if   (   i   <   0xBFA6)   return   "g";   
    
  if   (   i   <   0xC0AC)   return   "k";   
    
  if   (   i   <   0xC2E8)   return   "l";   
    
  if   (   i   <   0xC4C3)   return   "m";   
    
  if   (   i   <   0xC5B6)   return   "n";   
    
  if   (   i   <   0xC5BE)   return   "o";   
    
  if   (   i   <   0xC6DA)   return   "p";   
    
  if   (   i   <   0xC8BB)   return   "q";   
    
  if   (   i   <   0xC8F6)   return   "r";   
    
  if   (   i   <   0xCBFA)   return   "s";   
    
  if   (   i   <   0xCDDA)   return   "t";   
    
  if   (   i   <   0xCEF4)   return   "w";   
    
  if   (   i   <   0xD1B9)   return   "x";   
    
  if   (   i   <   0xD4D1)   return   "y";   
    
  if   (   i   <   0xD7FA)   return   "z";   
    
      
    
  return   "*";   
    
  }

#4


非常感谢wjq的回答...但我要的是"\u57c3\u6328\u54ce\u5509\u54c0\u7691\u764c\u853c\u77ee\u827e\u788d\u7231\u9698\u8bf6"这些转换回中文,而不是汉字取首字母!!

#5


根据\u分割字符串,取得后面的16进制数字,每2个字符一组,转为10进制写入byte[]中。
然后System.Text.Encoding.Unicode.GetString把byte[]转为字符串。

简单的办法。你构建一个html,<html><body>\u57c3\u6328\u54ce\u5509\u54c0\u7691\u764c\u853c\u77ee\u827e\u788d\u7231\u9698\u8bf6</body></html>
然后写入一个WebBrowse浏览器控件。然后取document.innerText就行了~~让ie帮你转。

#6


引用 5 楼 wjq 的回复:
根据\u分割字符串,取得后面的16进制数字,每2个字符一组,转为10进制写入byte[]中。
然后System.Text.Encoding.Unicode.GetString把byte[]转为字符串。

简单的办法。你构建一个html, <html> <body>\u57c3\u6328\u54ce\u5509\u54c0\u7691\u764c\u853c\u77ee\u827e\u788d\u7231\u9698\u8bf6 </body> </html>
然后写入一个WebBrowse浏览器控件。然后取document.innerText就行了~~让ie帮你转。
汗...那是JS特有的字符串表达方式.你这么写在html里没用的.

#7


using System;
using System.Text;
using System.Globalization;
class test{
static string jsstr = @"\u6709\u4e2a\u9884\u7ea6\u7b49\u5f85\u9662\u957f\u5230\u6765";
static string getJSStr (string js){
var codes = js.Split (new string[]{@"\u"},StringSplitOptions.RemoveEmptyEntries);
char[] chars = new char[codes.Length];
for (int i = 0;i<codes.Length;++i){
chars[i] = (char)int.Parse (codes[i],NumberStyles.AllowHexSpecifier);
}
return new String (chars);
}
static void Main (){

Console.Write (getJSStr (jsstr));
}
}

做了一小段程序,经验证能成功转.不过对源字串要求比较严格,必须全部是\uxxxx的格式.中间不能有其它字
符;否则会出错.要支持内部有其它字符的会比较麻烦,如果需要LZ再另外说明吧.

#8


学习 

#9


学习