本人在做項目時遇到這樣的情況:讀取Excel中別人輸入的內容呢。但是有一個問題是,必須別人輸入的是英文的逗號才行,我可以控制自己,但是控制別人有點不現實。所以想的是,別人輸入什麼樣的逗號,我這邊都能解釋。
基礎
全角:SBC case(sexagesimal to Binary Converter)六十進制轉二進制
半角:DBC case(Decimal to Binary Converter)十進制轉二進制
之所以叫全角半角:在屏幕上,一個漢字佔兩個標準字符的位置,因此把只佔一個標準字符位置的英文字符所佔位置叫“半角”,一般主要針對標準符號來說的。
半角是ASCII碼中的各個符號。在ASCII碼中,32-126爲可現實字符,1-31,127爲控制字符,不予考慮。
全角是GB22312-80(信息交換用漢字編碼字符集·基本集)中的各個符號。對應的字符爲65281-65374。
但是全角空格爲12288,半角空格爲32。全角半角相差65248,所以除了空格外,全角字符-65248 = 半角字符。
但是特別的是,不管是全角還是半角輸入法打出來的漢字所佔的都是兩位,也就是全角,圓圈句號也是。但是點句號不是,點句號會改變大小,跟逗號一樣,逗號能看出來改變形狀,但其實也就是改變大小。而數字和字母會看到明顯的所佔位不同。到目前爲止,我測試的只有圓圈句號和中文字不會改變佔位。其他的都會變。
代碼
一般來講,字符串可以用char[],也可以用StringBuilder動態數組。
/// 半角轉全角
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static String ToSBC(String input)
{
char[] c = input.ToCharArray();
for (int i = 0; i < c.Length; i++)
{
if (c[i] == 32) //十進制中32爲空格
{
c[i] = (char)12288;
continue;
}
if (c[i] < 127)
{ c[i] = (char)(c[i] + 65248); }
}
return new String(c);
}
///全角轉半角
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static String ToDBC(String input)
{
char[] c = input.ToCharArray();
for (int i = 0; i < c.Length; i++)
{
if (c[i] == 12288)
{
c[i] = (char)32;
continue;
}
if (c[i] > 65280 && c[i] < 65375)//GB22312-80集中這一段對應ASCII碼。
{ c[i]=(char)(c[i]-65248);}
}
return new String (c);
}
在main函數中這樣寫
string strSBC = ",。。中華1259test";
string result = ToDBC(strSBC);
Console.WriteLine("原來是"+strSBC+"\n"+"現在是"+result);
string strDBC = ",,..中華1259test";
string resultDBC = ToSBC(strDBC);
Console.WriteLine("原來是" + strDBC + "\n" + "現在是" + resultDBC);
Console.ReadKey();
就是這麼簡單,學習了兩者之間的轉換,學習了兩種碼是個什麼東西。
注意String和string的區別,怎麼設置動態字符串數組。