亂數產生Unicode中文範圍的中文字元
今天突然有一個需求需要用到這一方面的程式,大概就是產生一個現在Unicode字碼表內的中文字,然後是用亂數的型態產生的,由於之前對於文字的處理僅止於編碼的轉換(例如Big5轉Unicode),對於Unicode亂數後產生回中文字的功能是連碰都沒碰過,於是上網先搜尋一下必要的知識後,就開始寫個Console的程式來驗證。
Unicode中文字碼(CJK Unified Ideographs;中日韓統一表意文字)的範圍落在0x4E00至0x9FFF(UTF-32),但迄今(Unicode v11.0)最末的0x9FF0~0x9FFF這16個字仍是空白。有了這些知識後,要產生出這樣構想的程式碼自然就不是問題了!程式碼如下:
static void Main(string[] args)
{
//呼叫視窗使用Unicode字串來顯示
Console.OutputEncoding = System.Text.Encoding.Unicode;
//產生1000字Unicode中文字
for (int i = 0; i < 1000; i++)
{ Console.Write(getRandomUnicode().Substring(0, 1)); }
Console.Read();
}
//取得一個亂數的Unicode中文字
private static string getRandomUnicode()
{
//Unicode中文字範圍
int iMin = Convert.ToInt32("4E00", 16);
int iMax = Convert.ToInt32("9FFF", 16); //不考慮最末16個空白
//隨機一個中文字之整數
System.Random oRnd = new System.Random(System.Guid.NewGuid().GetHashCode());
int iChar = oRnd.Next(iMin, iMax);
//整數轉成Byte[],再轉成字串
return System.Text.Encoding.Unicode.GetString(System.BitConverter.GetBytes(iChar));
}