環境監測裝置中UTF8轉為Ucs2編碼方法

近期筆者在對新入行的員工進行基礎知識培訓,在涉及到環境監測裝置中如何將UTF-8轉為UCS-2問題時,筆者將此內容整理成文件,供後期員工作參考。

什麼是環境監測裝置?

環境監測裝置中UTF8轉為Ucs2編碼方法

環境監測裝置是基於物聯網技術下,利用溫溼度感測器、光照感測器等將相關資料透過通訊模組和網路傳遞至雲端後臺,幫助使用者實時瞭解資產的具體狀況。目前環境監測裝置主要應用於:農業種植、養殖業、生鮮冷鏈、藥物運輸等。例如,在農業大棚內,利用雲息環境監測裝置能夠監測大棚內的溫溼度、光照資料等,用科學化方式幫助農戶增產增量。

環境監測裝置中UTF8轉為Ucs2編碼方法

在環境監測裝置中為何需要將UTF-8轉為UCS2?

UTF8是一種變長的編碼方式,使用1-6個位元組表示一個字元。

環境監測裝置中UTF8轉為Ucs2編碼方法

UCS2是Unicode編碼的一種方式,Unicode只是一個符號集, 它規定了符號的二進位制程式碼, 沒有規定這個二進位制程式碼應該如何儲存,UCS2定義只用2個位元組儲存,UCS4則使用4個位元組儲存。程式碼檔案經常會用UTF8編碼格式,而簡訊中會經常會用到UCS2編碼,

UTF-8轉為UCS2的具體方法:

INT16S Utf8_To_Ucs2(const INT8U* pInput,const INT16U Len,bool BigE, INT8U *pUcs2)

{

INT8U b1, b2, b3, utfbytes;

INT8U OutBuf[BUF_MAX_LEN];

INT8U *pOutput = OutBuf;

INT16U Cnt = 0,UcsLen = 0;

if(pInput == NULL || pUcs2 == NULL) return -1;

while(Cnt < Len)

{

utfbytes = Get_Utf8_Size(*pInput);

Cnt += utfbytes;

UcsLen += 2;

//UART_PRINT(“utfbytes:%d %d\r\n”,utfbytes,*pInput);

switch ( utfbytes )

{

case 1:

if(BigE)

{

*(pOutput++) = 0;

*(pOutput++) = *(pInput++);

}else{

*(pOutput++) = *(pInput++);

*(pOutput++) = 0;

}

break;

case 2:

b1 = *(pInput++);

b2 = *(pInput++);

if ( (b2 & 0xE0) != 0x80 )

return -1;

if(BigE)

{

*(pOutput++) = (b1 >> 2) & 0x07;

*(pOutput++) = (b1 << 6) + (b2 & 0x3F);

}else{

*(pOutput++) = (b1 << 6) + (b2 & 0x3F);

*(pOutput++) = (b1 >> 2) & 0x07;

}

break;

case 3:

b1 = *(pInput++);

b2 = *(pInput++);

b3 = *(pInput++);

if ( ((b2 & 0xC0) != 0x80) || ((b3 & 0xC0) != 0x80) )

return -1;

if(BigE)

{

*(pOutput++) = (b1 << 4) + ((b2 >> 2) & 0x0F);

*(pOutput++) = (b2 << 6) + (b3 & 0x3F);

}else{

*(pOutput++) = (b2 << 6) + (b3 & 0x3F);

*(pOutput++) = (b1 << 4) + ((b2 >> 2) & 0x0F);

}

break;

default:

return -1;

break;

}

}

UcsLen = HexToAscii(pUcs2,OutBuf,UcsLen);

return UcsLen;

}

環境監測裝置中UTF8轉為Ucs2編碼方法

對於該內容,筆者將此分享到網路,希望能夠對從事相關工作的人員有所幫助。