utf8和ucs2互轉
UFT8和UCS2互轉效API使用進行拆分字數如圖
/* * 函式: * utf8_to_ucs2(utf8轉ucs2) * 引數: * utf8:utf8資料 * utf8_lenght:utf8資料長度 * ucs2:儲存ucs2資料空間 * ucs2_lenght:儲存ucs2資料空間長度 * 返回值: * 返回轉換後的ucs2位元組長度 * 備註: * ucs2等於NULL或utf8_lenght小於0都會作為統計不做賦值操作 * ssdwujianhua 2018/04/26 */ unsigned int utf8_to_ucs2(const char * utf8, unsigned int utf8_lenght, char *ucs2, unsigned int ucs2_lenght) { if ( utf8_lenght < 1 && utf8_lenght > ucs2_lenght) { return 0; } unsigned int utf8_pos = 0; //位元組偏移位置 unsigned int ucs2_pos = 0; bool bcount = true; //是否統計 if(ucs2 != NULL || ucs2_lenght < 0) { bcount = false; } while(true) { if((utf8[utf8_pos]&0x80)==0) //1位元組 { if( !bcount ) { ucs2[ucs2_pos]=0; ucs2[ucs2_pos+1]=utf8[utf8_pos]&0x7f; } utf8_pos+=1; ucs2_pos+=2; } else if((utf8[utf8_pos]&0xe0)==0xc0)//2位元組 { if(!bcount) { ucs2[ucs2_pos]=(utf8[utf8_pos]&0x1f)>>2; ucs2[ucs2_pos+1]=((utf8[utf8_pos]&0x03)<<6)|(utf8[utf8_pos+1]&0x3f); } utf8_pos+=2; ucs2_pos+=2; } else if((utf8[utf8_pos]&0xf0)==0xe0)//3位元組 { if(!bcount) { ucs2[ucs2_pos]=((utf8[utf8_pos]&0x0f)<<4)|((utf8[utf8_pos+1]&0x3f)>>2); ucs2[ucs2_pos+1]=((utf8[utf8_pos+1]&0x03)<<6)|(utf8[utf8_pos+2]&0x3f); } utf8_pos+=3; ucs2_pos+=2; } else { return -1; } if ( utf8_pos >= utf8_lenght) { if(!bcount) ucs2[ucs2_pos]='\0'; break; } } return ucs2_pos; } /* * 函式: * ucs2_to_utf8 * 引數: * ucs2:ucs2資料 * ucs2_lenght:ucs2資料長度 * utf8:儲存utf8資料空間 * utf8_lenght:儲存utf8資料空間長度 * 返回值: * 返回轉換後的utf8位元組長度 * 備註: * uft8等於NULL或utf8_lenght小於0都會作為統計不做賦值操作 * ssdwujianhua 2018/04/26 */ unsigned int ucs2_to_utf8(const char *ucs2, unsigned int ucs2_lenght, char * utf8, unsigned int utf8_lenght) { if ( utf8_lenght < 1 && (utf8_lenght > ucs2_lenght)) { return 0; } unsigned int utf8_pos = 0; //位元組偏移位置 unsigned int ucs2_pos = 0; bool bcount = true; //是否統計 if(utf8 != NULL || utf8_lenght < 0) { bcount = false; } while(true) { if (ucs2[ucs2_pos] == 0x00 && ucs2[ucs2_pos+1] <= 0x7f) //2個位元組轉成一個位元組 { if(!bcount) { utf8[utf8_pos]=ucs2[ucs2_pos+1]&0x7f; } ucs2_pos+=2; utf8_pos+=1; } else if ((ucs2[ucs2_pos]&0xf8)==0)//兩個位元組處理 { if(!bcount) { utf8[utf8_pos]=0xc0|((ucs2[ucs2_pos]&0x07)<<2)|((ucs2[ucs2_pos+1]&0xc0)>>6); utf8[utf8_pos+1]=0x80|ucs2[ucs2_pos+1]&0x3f; } ucs2_pos+=2; utf8_pos+=2; } else//三個位元組處理 { if(!bcount) { utf8[utf8_pos]=0xe0|((ucs2[ucs2_pos]&0xf0)>>4); utf8[utf8_pos+1]=0x80|((ucs2[ucs2_pos]&0x0f)<<2)|((ucs2[ucs2_pos+1]&0xc0)>>6); utf8[utf8_pos+2]=0x80|ucs2[ucs2_pos+1]&0x3f; } ucs2_pos+=2; utf8_pos+=3; } if (ucs2_pos >= ucs2_lenght ) { if(!bcount) utf8[utf8_pos] = '\0'; break; } } return utf8_pos; }
相關推薦
utf8和ucs2互轉
UFT8和UCS2互轉效API使用進行拆分字數如圖 /* * 函式: * utf8_to_ucs2(utf8轉ucs2) * 引數: * utf8:utf8資料 * utf8_lenght:utf8資料長度 * ucs2:儲存ucs2資料空間
C++ UTF8和UTF16互轉代碼
define iter 般的 != ont for efault 互轉 小端 簡介 1、這段代碼只考慮在小端序情況下的轉換(一般的機器都是的)。2、這段代碼需要C++11的支持(只是用到了u16string),如果不支持,可以添加下面代碼 typedef uin
wchar_t* 和char* 互轉
multi pan com nic return compose ide acp 轉化 //將單字節char*轉化為寬字節wchar_t* wchar_t* AnsiToUnicode(const char* szStr){ int nLen = MultiByte
utf8 unicode 編碼互轉
true 編碼 turn cti ram brush amp switch bsp static function utf8_to_unicode($c) { switch(strlen($c)) { case 1:
Python list 和 str 互轉
pytho str 輸出 互轉 div python post 字符串 pri 一、list轉字符串 命令:‘‘.join(list)其中,引號中是字符之間的分割符,如“,”,“;”,“\t”等等如:list = [1, 2, 3, 4, 5]‘‘.join(list)
DOM對象和jQuery互轉
scrip jquery 兩種 通過 需要 tel dom ron blog 一、jQuery對象轉成DOM對象: 兩種轉換方式將一個jQuery對象轉換成DOM對象:[index]和.get(index); (1)jQuery對象是一個數據對象,可以通過[index]的方
數組和list互轉
.cn ring 數組 code size length slist color pre 數組轉list 方法1: String[] stringArray = { "a", "b", "c", "d", "e" }; List<String> list =
數組和List 互轉
arrays 集合public class TestArrayList { public static void main(String[] args) { List<String> list = new ArrayList<String>() ; list.add("AAA"
CString和char互轉
erl HA str CP lpc In car har name CString轉char: CString m_Readcard; char ReaderName[22]; strcpy((char*)&ReaderName,(LPCTSTR)m_Readcar
C# 位元組陣列和字串 互轉
本章講述:部分資料型別,格式轉換(十六進位制字串和位元組陣列 互轉 位元組陣列和字串 互轉) public class HexConverter { #region 格式轉換 /// <summary> /// 轉換十六進位制
map和json互轉
/** * 轉換MP自己定義的JSONArray物件為List<Map>物件 * @param obj * @return */ public static List<Map<String,String>> jsonArrToList(JSO
iOS 音訊錄製AMR和WAV互轉(支援64位)
公司專案中涉及到語音錄製的功能,在錄音格式方面遇到一些小問題現在拿出來與大家分享一下。 眾所周知,iOS 音訊錄製是不支援AMR格式的。但 Android 好像是預設是AMR格式的。兩邊格式不同必然有一方做出妥協的。這裡只簡單介紹一下iOS 格式轉碼的方法。 1、音訊錄製簡介 在AVFoun
自定義物件和json互轉
有一次寫side project時,用json.dumps()方法對UserInfo物件進行序列化,卻報錯了。Object type of UserInfo is not JSON serializable.經過一番探索發現,json.dum
Mybatis Blob和String互轉,實現檔案上傳等。
這樣的程式碼網上有很多,但是本人親測有bug, 下面是我寫的程式碼。望參考 1 @MappedJdbcTypes(JdbcType.BLOB) 2 public class BlobAndStringTypeHandler extends BaseTypeHandler<String&g
利用JAXB對java物件和xml互轉
好一段時間沒寫部落格了,一直出差得有半年多時間了吧!其實還是懶,哈哈 最近算是轉行做大資料了,還好有個前輩帶帶,應該是比不少人少走彎路吧! 這東西主要學的是思想 今天寫個java物件和xml互轉的(專案的要用到xml的配置檔案) 主要是用JAXB實現java
Unicode編碼和中文互轉(JAVA實現)
//中文轉Unicode public static String gbEncoding(final String gbString) { //gbString = "測試" char[] utfBytes = gbString.toCharArray();
Object和xml互轉
import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentEx
java:集合框架(Arrays工具類的asList()方法的使用)-陣列和集合互轉
import java.util.ArrayList; import java.util.Arrays; import java.util.List; //陣列轉集合,雖然不能增加或刪除元素,但是可以集
Java Json和Map互轉
1.Json轉Map /** * @Author:wangh * @Description:json串解析存至map * @Date: */ public static Map<String, Object> Js
Java pdf和jpg互轉
pdfbox: jpg轉pdf: /** * 使用pdfbox將jpg轉成pdf * @param jpgStream jpg輸入流 * @param pdfPath pdf檔案儲存路徑 * @throws IOException IOExce