日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一网打尽中文编码转换---6种编码30个方向的转换

發布時間:2023/12/18 编程问答 72 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一网打尽中文编码转换---6种编码30个方向的转换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一網打盡中文編碼轉換——6編碼30個方向的轉換

1.問題提出

??? 在學編程序時,曾經有人問過“你可以編一個記事本程序嗎?”當時很不屑一顧,但是隨著學習MFC的深入,了解到記事本程序也并非易事,難點就是四種編碼之間的轉換。

對于編碼,這是一個令初學者頭疼的問題,特別是對于編碼的轉換,更是難以捉摸。筆者為了完成畢業設計中的一個編碼轉換模塊,研究了中文編碼和常見的字符集后,決定解決"記事本"程序的編碼問題,更進一步完成GB2312、Big5、GBK、Unicode 、Unicode big endian、UTF-8共6種編碼之間的任意轉換。

2.問題解決?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

(1)編碼基礎知識

a.了解編碼和字符集

這部分內容,我不在贅述,可參見CSDN Ancky的專欄中《各種字符集和編碼詳解》

博客地址:http://blog.csdn.net/ancky/article/details/2034809

b.單字節、雙字節、多字節

這部分內容,可參見我先前翻譯的博文《C++字符串完全指南--第一部分:win32?字符編碼》

博客地址:http://blog.csdn.net/ziyuanxiazai123/article/details/7482360

c.區域和代碼頁

這部分內容,可參見博客 ? ?? http://hi.baidu.com/tzpwater/blog/item/bd4abb0b60bff1db3ac7636a.html

d.中文編碼GB2312、GBK、Big5,這部分內容請參見CSDN? lengshine 博客中《GB2312、GBK、Big5漢字編碼
》,博客地址:http://blog.csdn.net/lengshine/article/details/5470545

e.Windows程序的字符編碼

這部分內容,可參見博客http://blog.sina.com.cn/s/blog_4e3197f20100a6z2.html 中《Windows程序的字符編碼》

(2)編碼總結

a.六種編碼的特點

六種編碼的特點如下圖所示:

b.編碼存儲差別

ANSI(在簡體中文中默認為GB2312)、Unicode、Unicode big endian 、UTF-8存儲存在差別。

以中文"你好"二字為例,他們存貯格式如下圖所示:

c.GB2312、Big5、GBK編碼的區別

三者中漢字均采用二個字節表示,但是字節表示的值范圍有所不同,如下圖所示:


(3)編碼轉換方式

6種編碼互相轉換,由排列組合知識知道共有30個方向的轉換.筆者采用的轉換方法,

多字節文件與Unicode文件轉換如下圖所示:

多字節文件之間轉換如下圖所示:

(4)編碼轉換使用的三個函數

a.MultiByteToWideChar

該函數完成多字節字符串向Unicode寬字符串的轉換.

函數原型為:

int MultiByteToWideChar(UINT CodePage,???????? // 代碼頁DWORD dwFlags,???????? // 轉換標志LPCSTR lpMultiByteStr, // 待轉換的字符串int cbMultiByte,?????? // 待轉換字符串的字節數目LPWSTR lpWideCharStr,? // 轉換后寬字符串的存儲空間int cchWideChar??????? // 轉換后寬字符串的存儲空間大小? 以寬字符大小為單位 ); b.WideCharToMultiByte 該函數完成Unicode寬字符串到多字節字符串的轉換,使用方法具體參見MSDN。 以上兩個函數可以完成大部分的字符串轉換,可以將其封裝成多字節和寬字節之間的轉換函數:[cpp] view plaincopyprint?
  • wchar_t*?Coder::MByteToWChar(UINT?CodePage,LPCSTR?lpcszSrcStr)??
  • {??
  • ????LPWSTR?lpcwsStrDes=NULL;??
  • ????int???len=MultiByteToWideChar(CodePage,0,lpcszSrcStr,-1,NULL,0);??
  • ????lpcwsStrDes=new?wchar_t[len+1];??
  • ????if(!lpcwsStrDes)??
  • ????????return?NULL;??
  • ????memset(lpcwsStrDes,0,sizeof(wchar_t)*(len+1));??
  • ????len=MultiByteToWideChar(CodePage,0,lpcszSrcStr,-1,lpcwsStrDes,len);??
  • ????if(len)??
  • ????????return?lpcwsStrDes;??
  • ????else??
  • ????{?????
  • ????????delete[]?lpcwsStrDes;??
  • ????????return?NULL;??
  • ????}??
  • }??
  • ??
  • char*?Coder::WCharToMByte(UINT?CodePage,LPCWSTR?lpcwszSrcStr)??
  • {??
  • ????char*?lpszDesStr=NULL;??
  • ????int?len=WideCharToMultiByte(CodePage,0,lpcwszSrcStr,-1,NULL,0,NULL,NULL);??
  • ????lpszDesStr=new?char[len+1];??
  • ????memset(lpszDesStr,0,sizeof(char)*(len+1));??
  • ????if(!lpszDesStr)??
  • ????????return?NULL;??
  • ????len=WideCharToMultiByte(CodePage,0,lpcwszSrcStr,-1,lpszDesStr,len,NULL,NULL);??
  • ????if(len)??
  • ????????return?lpszDesStr;??
  • ????else??
  • ????{?????
  • ????????delete[]?lpszDesStr;??
  • ????????return?NULL;??
  • ????}??
  • }???
  • c.LCMapString 依賴于本地機器的字符轉換函數,尤其是中文編碼在轉換時要依賴于本地機器, 直接利用上述a、b中敘述的函數會產生錯誤,例如直接從GB2312轉換到Big5,利用MultiByteToWideChar函數將GB2312轉換到Unicode字符串,然后從Unicode字符串利用函數WideCharToMultiByte轉換成Big5,將會發生錯誤,錯誤的結果如下圖所示: 因此中文編碼轉換時適當使用LCMapString函數,才能完成正確的轉換. 例如:[cpp] view plaincopyprint?
  • //簡體中文?GB2312?轉換成?繁體中文BIG5??
  • char*?Coder::GB2312ToBIG5(const?char*?szGB2312Str)??
  • {?????????
  • ????????LCID?lcid?=?MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC);??
  • ????????int?nLength?=?LCMapString(lcid,LCMAP_TRADITIONAL_CHINESE,szGB2312Str,-1,NULL,0);??
  • ????????char*?pBuffer=new?char[nLength+1];??
  • ????????if(!pBuffer)??
  • ????????????return?NULL;??
  • ????????LCMapString(lcid,LCMAP_TRADITIONAL_CHINESE,szGB2312Str,-1,pBuffer,nLength);??
  • ????????pBuffer[nLength]=0;??
  • ????????wchar_t*?pUnicodeBuff?=?MByteToWChar(CP_GB2312,pBuffer);??
  • ????????char*?pBIG5Buff?=?WCharToMByte(CP_BIG5,pUnicodeBuff);??
  • ????????delete[]?pBuffer;??
  • ????????delete[]?pUnicodeBuff;??
  • ????????return?pBIG5Buff;??
  • }???
  • (5)編碼實現 實現Coder類完成編碼轉換工作. Coder類的代碼清單如下:[cpp] view plaincopyprint?
  • //?Coder.h:?interface?for?the?Coder?class.??
  • //??
  • //??
  • ??
  • #if?!defined(AFX_ENCODING_H__2AC955FB_9F8F_4871_9B77_C6C65730507F__INCLUDED_)??
  • #define?AFX_ENCODING_H__2AC955FB_9F8F_4871_9B77_C6C65730507F__INCLUDED_??
  • ??
  • #if?_MSC_VER?>?1000??
  • #pragma?once??
  • #endif?//?_MSC_VER?>?1000??
  • //-----------------------------------------------------------------------------------------------??
  • //程序用途:實現GB2312、big5、GBK、Unicode、Unicode?big?endian、UTF-8六種編碼的任意裝換??????
  • //程序作者:湖北師范學院計算機科學與技術學院??王定橋???????????????????????????????????
  • //核心算法:根據不同編碼特點向其他編碼轉換??
  • //測試結果:在Windows7?VC6.0環境下測試通過???????????????????????????????????????????????????????
  • //制作時間:2012-04-24???????????????????????????????????????????????
  • //代碼版權:代碼公開供學習交流使用??歡迎指正錯誤??改善算法??
  • //-----------------------------------------------------------------------------------------------??
  • //Windows代碼頁??
  • typedef?enum?CodeType??
  • {??
  • ????CP_GB2312=936,??
  • ????CP_BIG5=950,??
  • ????CP_GBK=0??
  • }CodePages;??
  • //txt文件編碼??
  • typedef?enum?TextCodeType??
  • {?????
  • ????GB2312=0,??
  • ????BIG5=1,??
  • ????GBK=2,??
  • ????UTF8=3,??
  • ????UNICODE=4,??
  • ????UNICODEBIGENDIAN=5,??
  • ????DefaultCodeType=-1??
  • }TextCode;??
  • class?Coder????
  • {??
  • public:??
  • ????Coder();??
  • ????virtual?~Coder();??
  • public:??
  • ????//默認一次轉換字節大小??
  • ????UINT??PREDEFINEDSIZE;??
  • ????//指定轉換時默認一次轉換字節大小??
  • ????void?SetDefaultConvertSize(UINT?nCount);??
  • ????//編碼類型轉換為字符串??
  • ????CString??CodeTypeToString(TextCode?tc);??
  • ????//文件轉到另一種文件??
  • ????BOOL?????FileToOtherFile(CString?filesourcepath,?CString?filesavepath,TextCode?tcTo,TextCode??tcCur=DefaultCodeType);??
  • ????//Unicode?和Unicode?big?endian文件之間轉換??
  • ????BOOL?????UnicodeEndianFileConvert(CString?filesourcepath,?CString?filesavepath,TextCode?tcTo);??
  • ????//多字節文件之間的轉換??
  • ????BOOL?????MBFileToMBFile(CString?filesourcepath,?CString?filesavepath,TextCode?tcTo,TextCode??tcCur=DefaultCodeType);??
  • ????//Unicode和Unicode?big?endian文件向多字節文件轉換??
  • ????BOOL?????UnicodeFileToMBFile(CString?filesourcepath,?CString?filesavepath,TextCode?tcTo);??
  • ????//多字節文件向Unicode和Unicode?big?endian文件轉換??
  • ????BOOL?????MBFileToUnicodeFile(CString?filesourcepath,CString?filesavepath,TextCode?tcTo,TextCode??tcCur=DefaultCodeType);??
  • ????//獲取文件編碼類型??
  • ????TextCode?GetCodeType(CString?filepath);??
  • ????//繁體中文BIG5?轉換成?簡體中文?GB2312??
  • ????char*?BIG5ToGB2312(const?char*?szBIG5Str);??
  • ????//簡體中文?GB2312?轉換成?繁體中文BIG5??
  • ????char*?GB2312ToBIG5(const?char*?szGB2312Str);??
  • ????//簡繁中文GBK編碼轉換成簡體中文GB2312??
  • ????char*?GBKToGB2312(const?char?*szGBkStr);??
  • ????//簡體中文GB2312編碼轉換成簡繁中文GBK??
  • ????char*????GB2312ToGBK(const?char?*szGB2312Str);??
  • ????//簡繁中文GBK轉換成繁體中文Big5??
  • ????char*?????GBKToBIG5(const?char?*szGBKStr);??
  • ????//繁體中文BIG5轉換到簡繁中文GBK??
  • ????char*?????BIG5ToGBK(const?char?*szBIG5Str);??
  • ????//寬字符串向多字節字符串轉換??
  • ????char*?????WCharToMByte(UINT?CodePage,LPCWSTR?lpcwszSrcStr);??
  • ????//多字節字符串向寬字符串轉換??
  • ????wchar_t*??MByteToWChar(UINT?CodePage,LPCSTR?lpcszSrcStr);??
  • protected:??
  • ????//獲取編碼類型對應的代碼頁??
  • ????UINT?GetCodePage(TextCode?tccur);??
  • ????//多字節向多字節轉換??
  • ????char*??MByteToMByte(UINT?CodePageCur,UINT?CodePageTo,const?char*?szSrcStr);??
  • ????//Unicode和Unicode?big?endian字符串之間的轉換??
  • ????void???UnicodeEndianConvert(LPWSTR??lpwszstr);??
  • ????//文件頭常量字節數組??
  • ????const??static???byte?UNICODEBOM[2];??
  • ????const??static???byte?UNICODEBEBOM[2];??
  • ????const??static???byte?UTF8BOM[3];??
  • ??};??
  • ??
  • #endif?//?!defined(AFX_ENCODING_H__2AC955FB_9F8F_4871_9B77_C6C65730507F__INCLUDED_)??
  • [cpp] view plaincopyprint?
  • //?Coder.cpp:?implementation?of?the?Coder?class.??
  • //??
  • //??
  • ??
  • #include?"stdafx.h"??
  • #include?"Coder.h"??
  • #include?"Encoding.h"??
  • ??
  • #ifdef?_DEBUG??
  • #undef?THIS_FILE??
  • static?char?THIS_FILE[]=__FILE__;??
  • #define?new?DEBUG_NEW??
  • #endif??
  • ??
  • //??
  • //?Construction/Destruction??
  • //??
  • //初始化文件頭常量??
  • /*static*/?const?????byte?Coder::UNICODEBOM[2]={0xFF,0xFE};??
  • /*static*/?const?????byte?Coder::UNICODEBEBOM[2]={0xFE,0xFF};??
  • /*static*/?const?????byte?Coder::UTF8BOM[3]={0xEF,0xBB,0xBF};??
  • Coder::Coder()??
  • {??
  • ???PREDEFINEDSIZE=2097152;//默認一次轉換字節大小?2M字節??
  • }??
  • Coder::~Coder()??
  • {??
  • ????
  • }??
  • //繁體中文BIG5?轉換成?簡體中文?GB2312??
  • char*?Coder::BIG5ToGB2312(const?char*?szBIG5Str)??
  • {?????????
  • ????????CString?msg;??
  • ????????LCID?lcid?=?MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC);??
  • ????????wchar_t*?szUnicodeBuff?=MByteToWChar(CP_BIG5,szBIG5Str);??
  • ????????char*?szGB2312Buff?=WCharToMByte(CP_GB2312,szUnicodeBuff);??
  • ????????int?nLength?=?LCMapString(lcid,LCMAP_SIMPLIFIED_CHINESE,?szGB2312Buff,-1,NULL,0);??
  • ????????char*?pBuffer?=?new?char[nLength?+?1];??
  • ????????if(!pBuffer)??
  • ??????????return?NULL;??
  • ????????memset(pBuffer,0,sizeof(char)*(nLength+1));??
  • ????????LCMapString(0x0804,LCMAP_SIMPLIFIED_CHINESE,szGB2312Buff,-1,pBuffer,nLength);??
  • ????????delete[]?szUnicodeBuff;??
  • ????????delete[]?szGB2312Buff;??
  • ????????return?pBuffer;??
  • }??
  • //?GB2312?轉?GBK??
  • char*?Coder::GB2312ToGBK(const?char?*szGB2312Str)??
  • {??
  • ???????int?nStrLen?=?strlen(szGB2312Str);??
  • ???????if(!nStrLen)??
  • ???????????return?NULL;??
  • ???????LCID?wLCID?=?MAKELCID(MAKELANGID(LANG_CHINESE,?SUBLANG_CHINESE_SIMPLIFIED),?SORT_CHINESE_PRC);??
  • ???????int?nReturn?=?LCMapString(wLCID,?LCMAP_TRADITIONAL_CHINESE,?szGB2312Str,?nStrLen,?NULL,?0);??
  • ???????if(!nReturn)??
  • ??????????return?NULL;??
  • ???????char?*pcBuf?=?new?char[nReturn?+?1];??
  • ???????if(!pcBuf)??
  • ??????????return?NULL;??
  • ???????memset(pcBuf,0,sizeof(char)*(nReturn?+?1));??
  • ???????wLCID?=?MAKELCID(MAKELANGID(LANG_CHINESE,?SUBLANG_CHINESE_SIMPLIFIED),?SORT_CHINESE_PRC);??
  • ???????LCMapString(wLCID,?LCMAP_TRADITIONAL_CHINESE,?szGB2312Str,?nReturn,?pcBuf,?nReturn);??
  • ???????return?pcBuf;??
  • }??
  • //?GBK?轉換成?GB2312??
  • char*?Coder::GBKToGB2312(const?char?*szGBKStr)??
  • {??
  • ????int?nStrLen?=?strlen(szGBKStr);??
  • ????if(!nStrLen)??
  • ????????return?NULL;??
  • ????LCID?wLCID?=?MAKELCID(MAKELANGID(LANG_CHINESE,?SUBLANG_CHINESE_SIMPLIFIED),?SORT_CHINESE_BIG5);??
  • ????int?nReturn?=?LCMapString(wLCID,?LCMAP_SIMPLIFIED_CHINESE,?szGBKStr,?nStrLen,?NULL,?0);??
  • ????if(!nReturn)??
  • ????????return?NULL;??
  • ????char?*pcBuf?=?new?char[nReturn?+?1];??
  • ????memset(pcBuf,0,sizeof(char)*(nReturn?+?1));??
  • ????wLCID?=?MAKELCID(MAKELANGID(LANG_CHINESE,?SUBLANG_CHINESE_SIMPLIFIED),?SORT_CHINESE_BIG5);??
  • ????LCMapString(wLCID,?LCMAP_SIMPLIFIED_CHINESE,?szGBKStr,?nReturn,?pcBuf,?nReturn);??
  • ????return?pcBuf;??
  • }??
  • //簡繁中文GBK轉換成繁體中文Big5??
  • char*???Coder::GBKToBIG5(const?char?*szGBKStr)??
  • {?????
  • ????char?*pTemp=NULL;??
  • ????char?*pBuffer=NULL;??
  • ????pTemp=GBKToGB2312(szGBKStr);??
  • ????pBuffer=GB2312ToBIG5(pTemp);??
  • ????delete[]?pTemp;??
  • ????return?pBuffer;??
  • }??
  • //繁體中文BIG5轉換到簡繁中文GBK??
  • char*???Coder::BIG5ToGBK(const?char?*szBIG5Str)??
  • {??
  • ??????char?*pTemp=NULL;??
  • ??????char?*pBuffer=NULL;??
  • ??????pTemp=BIG5ToGB2312(szBIG5Str);??
  • ??????pBuffer=GB2312ToGBK(pTemp);??
  • ??????delete[]?pTemp;??
  • ??????return?pBuffer;??
  • }??
  • //簡體中文?GB2312?轉換成?繁體中文BIG5??
  • char*?Coder::GB2312ToBIG5(const?char*?szGB2312Str)??
  • {?????????
  • ????????LCID?lcid?=?MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC);??
  • ????????int?nLength?=?LCMapString(lcid,LCMAP_TRADITIONAL_CHINESE,szGB2312Str,-1,NULL,0);??
  • ????????char*?pBuffer=new?char[nLength+1];??
  • ????????if(!pBuffer)??
  • ????????????return?NULL;??
  • ????????LCMapString(lcid,LCMAP_TRADITIONAL_CHINESE,szGB2312Str,-1,pBuffer,nLength);??
  • ????????pBuffer[nLength]=0;??
  • ????????wchar_t*?pUnicodeBuff?=?MByteToWChar(CP_GB2312,pBuffer);??
  • ????????char*?pBIG5Buff?=?WCharToMByte(CP_BIG5,pUnicodeBuff);??
  • ????????delete[]?pBuffer;??
  • ????????delete[]?pUnicodeBuff;??
  • ????????return?pBIG5Buff;??
  • }???
  • //獲取文件編碼類型??
  • //Unicode編碼文件通過讀取文件頭判別??
  • //中文編碼通過統計文件編碼類別來判別??判別次數最多為30次????
  • //中文編碼的判別存在誤差??
  • TextCode?Coder::GetCodeType(CString?filepath)??
  • {??
  • ????CFile?file;??
  • ????byte??buf[3];//unsigned?char??
  • ????TextCode?tctemp;??
  • ????if(file.Open(filepath,CFile::modeRead))??
  • ????{??????
  • ????????file.Read(buf,3);??
  • ????????if(buf[0]==UTF8BOM[0]?&&?buf[1]==UTF8BOM[1]?&&?buf[2]==UTF8BOM[2])??
  • ????????????return?UTF8;??
  • ????????else??
  • ????????if(buf[0]==UNICODEBOM[0]?&&buf[1]==UNICODEBOM[1]?)??
  • ????????????return?UNICODE?;??
  • ????????else??
  • ????????if(buf[0]==UNICODEBEBOM[0]?&&buf[1]==UNICODEBEBOM[1]?)??
  • ????????????return?UNICODEBIGENDIAN;??
  • ????????else??
  • ????????{?????
  • ????????????int?time=30;??
  • ????????????while(file.Read(buf,2)?&&time?)??
  • ????????????{?????
  • ????????????????if?(?(buf[0]>=176?&&?buf[0]<=247)?&&?(buf[1]>=160?&&?buf[1]<=254)?)??
  • ????????????????????????????tctemp=GB2312;????
  • ????????????????else??
  • ????????????????????if?(?(buf[0]>=129?&&?buf[0]<=255)?&&?(??(?buf[1]>=64?&&?buf[1]<=126)??||??(?buf[1]>=161?&&?buf[1]<=254)?)?)??
  • ????????????????????????????tctemp=BIG5;??
  • ????????????????????else??
  • ????????????????????????if?(?(buf[0]>=129?&&?buf[0]?<=254)?&&?(buf[1]>=64?&&?buf[1]<=254))??
  • ????????????????????????????tctemp=GBK;???
  • ????????????????time--;??
  • ????????????????file.Seek(100,CFile::current);//跳過一定字節??利于統計全文??
  • ????????????}??
  • ????????????return?tctemp;??
  • ????????}??
  • ????}??
  • ????else??
  • ????????return?GB2312;??
  • }??
  • //多字節文件轉換為UNICODE、UNICODE?big?endian文件??
  • BOOL?Coder::MBFileToUnicodeFile(CString?filesourcepath,?CString?filesavepath,TextCode?tcTo,TextCode?tcCur)??
  • {??
  • ???TextCode?curtc;??
  • ???CFile?filesource,filesave;;??
  • ???char?????*pChSrc=NULL;??
  • ???char?????*pChTemp=NULL;??
  • ???wchar_t??*pwChDes=NULL;??
  • ???DWORD??filelength,readlen,len;??
  • ???int????bufferlen,strlength;??
  • ???UINT?CodePage;??
  • ???//由于存在誤差??允許用戶自定義轉換??
  • ???if(tcCur!=DefaultCodeType)??
  • ???????curtc=tcCur;??
  • ???else??
  • ???????curtc=GetCodeType(filesourcepath);??
  • ???if(curtc>UTF8?||?tcTo<?UNICODE?||?curtc==tcTo)??
  • ???????return?FALSE;??
  • ???//源文件打開失敗或者源文件無內容?后者保存文件建立失敗???均返回轉換失敗??
  • ???if(!filesource.Open(filesourcepath,CFile::modeRead)?||?0==(filelength=filesource.GetLength()))??
  • ???????return?FALSE;??
  • ???if(?!filesave.Open(filesavepath,CFile::modeCreate|CFile::modeWrite))??
  • ????????return?FALSE;??
  • ???//預分配內存??分配失敗則轉換失敗??
  • ???if(filelength<PREDEFINEDSIZE)??
  • ???????bufferlen=filelength;??
  • ???else??
  • ???????bufferlen=PREDEFINEDSIZE;??
  • ???pChSrc=new?char[bufferlen+1];??
  • ???if(!pChSrc)??
  • ????????????return?FALSE;??
  • ???//根據當前文件類別指定轉換代碼頁??
  • ???switch(curtc)??
  • ???{??
  • ???case?GB2312:??
  • ???????CodePage=CP_GB2312;??
  • ???????break;??
  • ???case?GBK:??
  • ???????CodePage=CP_GB2312;//特殊處理??
  • ???????break;??
  • ???case?BIG5:??
  • ???????CodePage=CP_BIG5;??
  • ???????break;??
  • ???case?UTF8:??
  • ???????CodePage=CP_UTF8;??
  • ???????break;??
  • ???default:??
  • ???????break;??
  • ????}??
  • ???//UTF8文件跳過文件??
  • ???if(UTF8==curtc)??
  • ???????filesource.Seek(3*sizeof(byte),CFile::begin);??
  • ???//寫入文件頭??
  • ???if(UNICODEBIGENDIAN==tcTo)??
  • ???????filesave.Write(&UNICODEBEBOM,2*sizeof(byte));??
  • ???else??
  • ???????filesave.Write(&UNICODEBOM,2*sizeof(byte));??
  • ???//讀取文件??分段轉換知道結束??
  • ???while(filelength>0)??
  • ???{??
  • ???????memset(pChSrc,0,?sizeof(char)*(bufferlen+1));??
  • ???????if(filelength>PREDEFINEDSIZE)??
  • ???????????len=PREDEFINEDSIZE;??
  • ???????else??
  • ???????????len=filelength;??
  • ???????readlen=filesource.Read(pChSrc,len);??
  • ???????if(!readlen)??
  • ????????????break;??
  • ???????//GBK轉換為GB2312處理??
  • ???????if(GBK==curtc)??
  • ???????{?????
  • ???????????pChTemp=pChSrc;??
  • ???????????pChSrc=GBKToGB2312(pChSrc);??
  • ???????}??
  • ???????pwChDes=MByteToWChar(CodePage,pChSrc);??
  • ???????if(pwChDes)??
  • ???????{??
  • ???????????if(UNICODEBIGENDIAN==tcTo)??
  • ???????????????UnicodeEndianConvert(pwChDes);??
  • ???????????strlength=wcslen(pwChDes)*2;//這里注意寫入文件的長度??
  • ???????????filesave.Write(pwChDes,strlength);??
  • ???????????filesave.Flush();??
  • ???????????filelength-=readlen;??
  • ???????}??
  • ???????else??
  • ???????????break;??
  • ???}??
  • ???delete[]?pChSrc;??
  • ???delete[]?pChTemp;??
  • ???delete[]?pwChDes;??
  • ???return?TRUE;??
  • }??
  • //??
  • wchar_t*?Coder::MByteToWChar(UINT?CodePage,LPCSTR?lpcszSrcStr)??
  • {??
  • ????LPWSTR?lpcwsStrDes=NULL;??
  • ????int???len=MultiByteToWideChar(CodePage,0,lpcszSrcStr,-1,NULL,0);??
  • ????lpcwsStrDes=new?wchar_t[len+1];??
  • ????if(!lpcwsStrDes)??
  • ????????return?NULL;??
  • ????memset(lpcwsStrDes,0,sizeof(wchar_t)*(len+1));??
  • ????len=MultiByteToWideChar(CodePage,0,lpcszSrcStr,-1,lpcwsStrDes,len);??
  • ????if(len)??
  • ????????return?lpcwsStrDes;??
  • ????else??
  • ????{?????
  • ????????delete[]?lpcwsStrDes;??
  • ????????return?NULL;??
  • ????}??
  • }??
  • ??
  • char*?Coder::WCharToMByte(UINT?CodePage,LPCWSTR?lpcwszSrcStr)??
  • {??
  • ????char*?lpszDesStr=NULL;??
  • ????int?len=WideCharToMultiByte(CodePage,0,lpcwszSrcStr,-1,NULL,0,NULL,NULL);??
  • ????lpszDesStr=new?char[len+1];??
  • ????memset(lpszDesStr,0,sizeof(char)*(len+1));??
  • ????if(!lpszDesStr)??
  • ????????return?NULL;??
  • ????len=WideCharToMultiByte(CodePage,0,lpcwszSrcStr,-1,lpszDesStr,len,NULL,NULL);??
  • ????if(len)??
  • ????????return?lpszDesStr;??
  • ????else??
  • ????{?????
  • ????????delete[]?lpszDesStr;??
  • ????????return?NULL;??
  • ????}??
  • }???
  • //Unicode?和Unicode?big?endian之間字節序的轉換??
  • void?Coder::UnicodeEndianConvert(LPWSTR?lpwszstr)??
  • {??????
  • ?????wchar_t??wchtemp[2];????
  • ?????long?????index;???
  • ?????int?len=wcslen(lpwszstr);??
  • ?????if(!len)??
  • ?????????return;??
  • ???//交換高低字節?直到遇到結束符??
  • ???index=0;??
  • ???while(?index<len)??
  • ???{??
  • ???????wchtemp[0]=lpwszstr[index];??
  • ???????wchtemp[1]=lpwszstr[index+1];??
  • ?????????
  • ???????unsigned?char?high,?low;??
  • ???????high?=?(wchtemp[0]?&?0xFF00)?>>8;??
  • ???????low??=?wchtemp[0]?&?0x00FF;??
  • ???????wchtemp[0]?=?(?low?<<8)?|?high;??
  • ???????high?=?(wchtemp[1]?&?0xFF00)?>>8;??
  • ???????low??=?wchtemp[1]?&?0x00FF;??
  • ???????wchtemp[1]?=?(?low?<<8)?|?high;??
  • ?????????
  • ???????lpwszstr[index]=wchtemp[0];??
  • ???????lpwszstr[index+1]=wchtemp[1];??
  • ???????index+=2;??
  • ???}??
  • }??
  • //Unicode和Unicode?big?endian文件向多字節文件轉換??
  • BOOL?Coder::UnicodeFileToMBFile(CString?filesourcepath,?CString?filesavepath,TextCode?tcTo)??
  • {?????
  • ????TextCode?curtc;??
  • ????CFile?filesource,filesave;;??
  • ????char????*pChDes=NULL;??
  • ????char????*pChTemp=NULL;??
  • ????wchar_t?*pwChSrc=NULL;??
  • ????DWORD??filelength,readlen,len;??
  • ????int????bufferlen,strlength;??
  • ????UINT?CodePage;??
  • ????curtc=GetCodeType(filesourcepath);??
  • ????//文件轉換類型錯誤?則轉換失敗??
  • ????if(curtc<=UTF8?||??tcTo>UTF8?||?curtc==tcTo)??
  • ????????return?FALSE;??
  • ????//源文件打開失敗或者源文件無內容?后者保存文件建立失敗???均轉換失敗??
  • ????if(!filesource.Open(filesourcepath,CFile::modeRead)?||?0==(filelength=filesource.GetLength()))??
  • ????????return?FALSE;??
  • ????if(?!filesave.Open(filesavepath,CFile::modeCreate|CFile::modeWrite))??
  • ????????return?FALSE;??
  • ????//預分配內存??分配失敗則轉換失敗??
  • ????if(filelength<PREDEFINEDSIZE)??
  • ????????bufferlen=filelength;??
  • ????else??
  • ????????bufferlen=PREDEFINEDSIZE;??
  • ????pwChSrc=new?wchar_t[(bufferlen/2)+1];??
  • ????if(!pwChSrc)??
  • ????????return?FALSE;??
  • ????//預先決定代碼頁??
  • ????switch(tcTo)??
  • ????{?????
  • ????case?GB2312:??
  • ????????CodePage=CP_GB2312;??
  • ????????break;??
  • ????case?GBK:??
  • ????????CodePage=CP_GB2312;//特殊處理??
  • ????????break;??
  • ????case?BIG5:???
  • ????????CodePage=CP_GB2312;//特殊處理??
  • ????????break;??
  • ????case?UTF8:??
  • ????????CodePage=CP_UTF8;??
  • ????????break;??
  • ????default:??
  • ????????break;??
  • ????????}??
  • ????filesource.Seek(sizeof(wchar_t),CFile::begin);??
  • ????while(filelength>0)??
  • ????{??
  • ????????memset(pwChSrc,0,sizeof(wchar_t)*((bufferlen/2)+1));??
  • ????????if(filelength>PREDEFINEDSIZE)??
  • ????????????len=PREDEFINEDSIZE;??
  • ????????else??
  • ????????????len=filelength;??
  • ????????readlen=filesource.Read(pwChSrc,len);??
  • ????????if(!readlen)??
  • ????????????break;??
  • ????????if(UNICODEBIGENDIAN==curtc)??
  • ????????????UnicodeEndianConvert(pwChSrc);??
  • ????????pChDes=WCharToMByte(CodePage,pwChSrc);??
  • ????????//GBK無法直接轉換??BIG5直接轉換會產生錯誤??二者均先轉到GB2312然后再轉到目的類型??
  • ????????if(GBK==tcTo)??
  • ????????{??
  • ????????????pChTemp=pChDes;??
  • ????????????pChDes=GB2312ToGBK(pChDes);??
  • ????????}??
  • ????????if(BIG5==tcTo)??
  • ????????{??
  • ????????????pChTemp=pChDes;??
  • ????????????pChDes=GB2312ToBIG5(pChDes);??
  • ????????}??
  • ????????if(pChDes)??
  • ????????{?????
  • ????????????strlength=strlen(pChDes);??
  • ????????????filesave.Write(pChDes,strlength);??
  • ????????????filesave.Flush();??
  • ????????????filelength-=readlen;??
  • ????????}??
  • ????????else??
  • ????????????break;??
  • ????}??
  • ????delete[]?pChDes;??
  • ????delete[]?pChTemp;??
  • ????delete[]?pwChSrc;??
  • ????return?TRUE;??
  • }??
  • //多字節文件轉為多字節文件??
  • //多字節轉為多字節時,一般先轉為UNICODE類型,再轉換到指定目的類型,實行兩次轉換??
  • BOOL?Coder::MBFileToMBFile(CString?filesourcepath,?CString?filesavepath,TextCode?tcTo,TextCode??tcCur)??
  • {??
  • ????BOOL?bret=FALSE;??
  • ????TextCode?curtc;??
  • ????CFile?filesource,filesave;??
  • ????char????*pChDes=NULL;??
  • ????char????*pChSrc=NULL;??
  • ????DWORD??filelength,readlen,len;??
  • ????int????bufferlen,strlength;??
  • ????UINT???CodePageCur,CodePageTo;??
  • ????//由于存在誤差??允許用戶自定義轉換??
  • ????if(DefaultCodeType!=tcCur)??
  • ?????????curtc=tcCur;??
  • ????else??
  • ????????curtc=GetCodeType(filesourcepath);??
  • ????//轉換類型錯誤??則返回轉換失敗??
  • ????if(curtc>UTF8?||?tcTo>UTF8?||?curtc==tcTo)??
  • ????????return?FALSE;??
  • ????//源文件打開失敗或者源文件無內容?后者保存文件建立失敗???均返回轉換失敗??
  • ????if(!filesource.Open(filesourcepath,CFile::modeRead)?||?0==(filelength=filesource.GetLength()))??
  • ????????return?FALSE;??
  • ????if(?!filesave.Open(filesavepath,CFile::modeCreate|CFile::modeWrite))??
  • ????????return?FALSE;??
  • ????//預分配內存??分配失敗則轉換失敗??
  • ????if(filelength<PREDEFINEDSIZE)??
  • ????????bufferlen=filelength;??
  • ????else??
  • ????????bufferlen=PREDEFINEDSIZE;??
  • ????pChSrc=new?char[bufferlen+1];??
  • ????if(!pChSrc)??
  • ????????????return?FALSE;??
  • ????if(UTF8==curtc)??
  • ????????filesource.Seek(3*sizeof(byte),CFile::begin);??
  • ????CodePageCur=GetCodePage(curtc);??
  • ????CodePageTo=GetCodePage(tcTo);??
  • ????while(filelength>0)??
  • ????{?????
  • ????????memset(pChSrc,0,sizeof(char)*(bufferlen+1));??
  • ????????if(filelength>PREDEFINEDSIZE)??
  • ????????????len=PREDEFINEDSIZE;??
  • ????????else??
  • ????????????len=filelength;??
  • ????????readlen=filesource.Read(pChSrc,len);??
  • ????????if(!readlen)??
  • ????????????break;??
  • ????????pChDes=MByteToMByte(CodePageCur,CodePageTo,pChSrc);??
  • ????????if(pChDes)??
  • ????????{?????
  • ????????????strlength=strlen(pChDes);??
  • ????????????filesave.Write(pChDes,strlength);??
  • ????????????filelength-=readlen;??
  • ????????}??
  • ????????else??
  • ????????????break;??
  • ????}??
  • ????delete[]?pChSrc;??
  • ????delete[]?pChDes;??
  • ????return?TRUE;??
  • }??
  • //Unicode?和Unicode?big?endian文件之間轉換??
  • BOOL?Coder::UnicodeEndianFileConvert(CString?filesourcepath,?CString?filesavepath,TextCode?tcTo)??
  • {??
  • ????TextCode?curtc=GetCodeType(filesourcepath);??
  • ????if(curtc!=UNICODE?&&?curtc!=UNICODEBIGENDIAN)??
  • ????????return?FALSE;??
  • ????if(curtc==tcTo)??
  • ????????return?FALSE;??
  • ????CFile?filesource,filesave;;??
  • ????wchar_t?*pwChDes;??
  • ????DWORD?length;??
  • ????if(!filesource.Open(filesourcepath,CFile::modeRead)?||?!filesave.Open(filesavepath,CFile::modeCreate|CFile::modeWrite))??
  • ????????return?FALSE;??
  • ????length=filesource.GetLength();??
  • ????if(!length)??
  • ????????return?FALSE;??
  • ????pwChDes=new?wchar_t[(length/2)+1];??
  • ????if(!pwChDes)??
  • ????????return?FALSE;??
  • ????memset(pwChDes,0,sizeof(wchar_t)*((length/2)+1));??
  • ????filesource.Read(pwChDes,length);??
  • ????UnicodeEndianConvert(pwChDes);??
  • ????length=wcslen(pwChDes)*2;??
  • ????if(UNICODE==tcTo)??
  • ????????filesave.Write(&UNICODEBOM,2*sizeof(byte));??
  • ????else??
  • ????????filesave.Write(&UNICODEBEBOM,2*sizeof(byte));??
  • ????filesave.Write(pwChDes,length);??
  • ????filesave.Flush();??
  • ????delete[]?pwChDes;??
  • ????return?TRUE;??
  • }??
  • //文件轉到另一種文件??
  • //6種格式文件兩兩轉換??共計30種轉換??
  • BOOL?Coder::FileToOtherFile(CString?filesourcepath,?CString?filesavepath,?TextCode?tcTo,TextCode??tcCur)??
  • {?????
  • ????TextCode?curtc;??
  • ????BOOL?bret=FALSE;??
  • ????if(DefaultCodeType!=tcCur)??
  • ????????curtc=tcCur;??
  • ????else??
  • ????????curtc=GetCodeType(filesourcepath);??
  • ????if(curtc==tcTo)??
  • ????????return?FALSE;??
  • ????//UNICODE和UNICODE?big?endian文件之間轉換?共2種??
  • ????if(curtc>=UNICODE&&?tcTo>=UNICODE)??
  • ????????????bret=UnicodeEndianFileConvert(filesourcepath,filesavepath,tcTo);??
  • ????else??
  • ????????//多字節文件向?UNICODE和UNICODE?big?endian文件之間轉換?共8種??
  • ????????if(curtc<UNICODE?&&?tcTo>=UNICODE)??
  • ????????????bret=MBFileToUnicodeFile(filesourcepath,filesavepath,tcTo,curtc);??
  • ????else??
  • ????????//UNICODE和UNICODE?big?endian文件向多字節文件轉換?共8種??
  • ????????if(curtc>=UNICODE?&&?tcTo<UNICODE)??
  • ????????????bret=UnicodeFileToMBFile(filesourcepath,filesavepath,tcTo);??
  • ????else??
  • ????????//多字節文件之間轉換?共12種??
  • ????????if(curtc<UNICODE?&&?tcTo<UNICODE)??
  • ????????????bret=MBFileToMBFile(filesourcepath,filesavepath,tcTo,curtc);??
  • ????return?bret;??
  • }??
  • //編碼類型轉換為字符串??
  • CString?Coder::CodeTypeToString(TextCode?tc)??
  • {??
  • ??????CString?strtype;??
  • ??????switch(tc)??
  • ??????{??
  • ??????case?GB2312:??
  • ???????????strtype=_T("GB2312");??
  • ???????????break;??
  • ??????case?BIG5:??
  • ??????????strtype=_T("Big5");??
  • ???????????break;??
  • ??????case?GBK:??
  • ??????????strtype=_T("GBK");??
  • ???????????break;??
  • ??????case?UTF8:??
  • ??????????strtype=_T("UTF-8");??
  • ???????????break;??
  • ??????case?UNICODE:??
  • ??????????strtype=_T("Unicode");??
  • ???????????break;??
  • ??????case?UNICODEBIGENDIAN:??
  • ??????????strtype=_T("Unicode?big?endian");??
  • ???????????break;??
  • ??????}??
  • ??????return?strtype;??
  • }??
  • //多字節向多字節轉換??
  • char*?Coder::MByteToMByte(UINT?CodePageCur,?UINT?CodePageTo,?const?char*?szSrcStr)??
  • {??
  • ????char????*pchDes=NULL;??
  • ????char????*pchTemp=NULL;??
  • ????wchar_t?*pwchtemp=NULL;??
  • ????//三種中文編碼之間轉換??
  • ????if(CodePageCur!=CP_UTF8??&&?CodePageTo!=CP_UTF8)??
  • ????{??
  • ????????switch(CodePageCur)??
  • ????????{??
  • ????????????case?CP_GB2312:??
  • ????????????????{??
  • ????????????????????if(CP_BIG5==CodePageTo)???
  • ???????????????????????pchDes=GB2312ToBIG5(szSrcStr);??
  • ????????????????????else??
  • ???????????????????????pchDes=GB2312ToGBK(szSrcStr);??
  • ????????????????????break;??
  • ????????????????}??
  • ????????????case?CP_BIG5:??
  • ????????????????{?????
  • ????????????????????if(CP_GB2312==CodePageTo)??
  • ????????????????????????pchDes=BIG5ToGB2312(szSrcStr);??
  • ????????????????????else??
  • ????????????????????????pchDes=BIG5ToGBK(szSrcStr);??
  • ????????????????????break;??
  • ????????????????}??
  • ????????????case?CP_GBK:??
  • ????????????????{?????
  • ????????????????????if(CP_GB2312==CodePageTo)??
  • ????????????????????????pchDes=GBKToGB2312(szSrcStr);??
  • ????????????????????else??
  • ????????????????????????pchDes=GBKToBIG5(szSrcStr);??
  • ????????????????????break;??
  • ????????????????}??
  • ????????}??
  • ????}??
  • ????else??
  • ????{????//從UTF-8轉到其他多字節??直接轉到GB2312?其他形式用GB2312做中間形式??
  • ?????????if(CP_UTF8==CodePageCur)??
  • ?????????{????
  • ????????????pwchtemp=MByteToWChar(CodePageCur,szSrcStr);??
  • ????????????if(CP_GB2312==CodePageTo)??
  • ????????????{??
  • ????????????????pchDes=WCharToMByte(CP_GB2312,pwchtemp);??
  • ????????????}??
  • ????????????else??
  • ????????????{??????
  • ????????????????pchTemp=WCharToMByte(CP_GB2312,pwchtemp);??
  • ?????????????????if(CP_GBK==CodePageTo)??
  • ????????????????????pchDes=GB2312ToGBK(pchTemp);??
  • ?????????????????else??
  • ????????????????????pchDes=GB2312ToBIG5(pchTemp);??
  • ????????????}??
  • ?????????}??
  • ?????????//從其他多字節轉到UTF-8??
  • ?????????else???
  • ?????????{??????
  • ??????????????if(CP_GBK==CodePageCur)??
  • ??????????????{?????
  • ??
  • ??????????????????pchTemp=GBKToGB2312(szSrcStr);??
  • ??????????????????pwchtemp=MByteToWChar(CP_GB2312,pchTemp);??
  • ??????????????}??
  • ??????????????else??
  • ????????????????pwchtemp=MByteToWChar(CodePageCur,szSrcStr);??
  • ??????????????pchDes=WCharToMByte(CodePageTo,pwchtemp);??
  • ?????????}??
  • ????}??
  • ????delete[]?pchTemp;??
  • ????delete[]?pwchtemp;??
  • ????return?pchDes;??
  • }??
  • //獲取編碼類型對應的代碼頁??
  • UINT?Coder::GetCodePage(TextCode?tccur)??
  • {??
  • ??????UINT?CodePage;??
  • ??????switch(tccur)??
  • ??????{??
  • ??????case?GB2312:??
  • ??????????CodePage=CP_GB2312;??
  • ??????????break;??
  • ??????case?BIG5:??
  • ??????????CodePage=CP_BIG5;??
  • ??????????break;??
  • ??????case?GBK:??
  • ??????????CodePage=CP_GBK;??
  • ??????????break;??
  • ??????case?UTF8:??
  • ??????????CodePage=CP_UTF8;??
  • ??????????break;??
  • ??????case?UNICODEBIGENDIAN:??
  • ??????case?UNICODE:??
  • ???????????break;??
  • ????}??
  • ??????return?CodePage;??
  • }??
  • //指定轉換時默認一次轉換字節大小??
  • void?Coder::SetDefaultConvertSize(UINT?nCount)??
  • {??????
  • ?????if(nCount!=0)??
  • ????????PREDEFINEDSIZE=nCount;??
  • }??
  • 3.運行效果 在win7 VC 6.0下測試六種編碼的轉換測試通過,30個方向的轉換如下圖所示: 測試程序運行效果如下圖所示:


    GB2312轉換到GBK編碼效果如下圖所示:


    UTF-8轉換到Big5編碼的效果如下圖所示:


    本文代碼及轉碼程序下載 :http://download.csdn.net/user/ziyuanxiazai123

    4.尚未解決的問題?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

    (1)LCMapString函數的理解還不完全熟悉,其中參數偏多,理解需要一定基礎知識。

    (2)為什么記事本程序的轉碼后存在些亂碼,亂碼是正確的嗎?因為我的程序使用了中間過渡形式,因此沒有任何亂碼。

    (3)是否有更簡單和清晰的方式實現編碼轉換,待進一步研究。

    總結

    以上是生活随笔為你收集整理的一网打尽中文编码转换---6种编码30个方向的转换的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    黄污视频网站 | 99综合电影在线视频 | 99热在线精品观看 | 夜夜婷婷| 日韩理论片在线观看 | 日韩精品免费一区二区在线观看 | 97超碰国产在线 | 亚洲影音先锋 | 久久久91精品国产一区二区精品 | 福利视频在线看 | 日本黄色免费看 | 国产麻豆电影在线观看 | 狠狠干2018 | 五月天丁香视频 | 婷婷在线免费 | 久久国产精品一国产精品 | 伊人永久在线 | 日韩一区正在播放 | 91视频 - v11av | 日本精品一区二区三区在线播放视频 | 亚洲九九 | 国产精品高清免费在线观看 | 久久成人一区二区 | 毛片的网址 | 欧美日韩亚洲精品在线 | 97福利在线 | 亚洲天堂在线观看完整版 | 久久久伦理 | 亚洲一二区精品 | 色综合天天| 日韩成人在线一区二区 | 一级免费黄色 | 99精品毛片| 永久免费精品视频网站 | 日韩激情中文字幕 | 亚洲一级片在线看 | 欧美日韩在线免费视频 | 日批视频在线观看免费 | 免费在线观看日韩 | 黄色网中文字幕 | 日韩一级理论片 | 少妇高潮流白浆在线观看 | 久久精品专区 | 国内外成人免费在线视频 | 日本久久电影网 | 99久久精品无码一区二区毛片 | 在线观看免费黄色 | 91丨九色丨国产女 | 日韩欧美国产激情在线播放 | a天堂中文在线 | 美女国内精品自产拍在线播放 | 91精品天码美女少妇 | 欧美色综合久久 | 中文字幕免费高清av | 亚洲另类人人澡 | 亚洲精品视 | 中文字幕在线乱 | 天天干天天综合 | 亚洲欧美日韩一级 | 国产在线精品视频 | 天天色天天操综合 | www.久久爱.cn | 久久久免费高清视频 | 久久人人爽人人爽人人片 | 天堂网一区二区三区 | 婷婷在线视频观看 | 免费在线观看一级片 | 久久er99热精品一区二区 | 黄色av播放| 伊人婷婷 | 国产亚洲精品日韩在线tv黄 | 亚洲国产激情 | 日韩欧美视频一区二区 | 99精品视频一区二区 | 亚洲尺码电影av久久 | 四虎在线免费观看 | 日本精品一区二区三区在线播放视频 | 日韩女同一区二区三区在线观看 | 亚洲四虎在线 | 久久8| 99色在线播放 | 91成人精品一区在线播放 | 日韩高清三区 | 日韩久久精品一区二区 | 就要色综合 | 九九综合九九综合 | 天天看天天干天天操 | 91福利社区在线观看 | 国产精品视频99 | 日韩欧美一二三 | 免费看黄在线观看 | 丰满少妇久久久 | 日本精品视频在线 | 天堂入口网站 | 中文字幕在线观看免费高清完整版 | 免费裸体视频网 | 国产一级在线观看 | 激情电影在线观看 | 日日干综合 | 一级欧美日韩 | www.天天色.com | 手机在线日韩视频 | 国产一区二区在线视频观看 | 亚洲成人av片在线观看 | 麻豆免费精品视频 | 99热在线国产精品 | 麻豆视频91 | 婷婷六月天天 | 欧美性免费 | 综合色在线观看 | 麻豆视频91 | 91精品国产91热久久久做人人 | 久久综合影视 | 久青草视频 | 五月婷婷,六月丁香 | 九色91av| 中文字幕一区二区三区乱码在线 | 天天激情 | 国产98色在线 | 日韩 | 日日摸日日 | 成人av在线电影 | 午夜在线国产 | 黄色av一级 | 国产在线不卡 | 狠狠色伊人亚洲综合网站色 | 天天操天天操天天操天天操天天操天天操 | 婷婷色五| 亚洲精品在线观看av | 中文av在线播放 | 开心丁香婷婷深爱五月 | 日韩中文字幕免费电影 | 91中文字幕在线视频 | 深爱五月激情五月 | 婷婷综合久久 | 精品久久久久一区二区国产 | 99精品国产一区二区三区不卡 | 337p日本欧洲亚洲大胆裸体艺术 | 国产成人一区二区在线观看 | 九九热视频在线免费观看 | 亚洲伊人第一页 | 国产精品久久久久久久久久不蜜月 | 激情www| 九色激情网 | 91大神一区二区三区 | 91看片看淫黄大片 | 综合久久久久久 | 黄网站大全 | 美女网站黄在线观看 | 日韩极品视频在线观看 | 国产操在线 | 日韩免费在线 | 中文字幕资源网 | 婷婷六月丁香激情 | 国产在线不卡精品 | 91成人精品一区在线播放 | 国产成人av电影在线 | 高清av免费看 | 在线观看完整版免费 | 久久高清片| 麻豆视频免费入口 | 亚洲欧美经典 | av成人在线看 | 国产成人精品一区二三区 | 四虎在线永久免费观看 | 亚洲精品在线视频 | 69视频永久免费观看 | 久久久久网址 | 国产亚洲精品成人 | 丁香六月激情 | 五月婷婷丁香网 | 色资源中文字幕 | 久久99婷婷 | 亚洲在线精品视频 | 日韩三区在线观看 | 久久久久久久18 | 免费看黄视频 | 亚洲区精品视频 | 天天干婷婷 | 天堂av最新网址 | 久久九精品 | 日韩精品一区二区三区免费观看 | 麻豆系列在线观看 | 精品国产亚洲一区二区麻豆 | 九九视频免费观看视频精品 | 国产精品一区二区三区电影 | 黄色在线视频网址 | 久久99精品国产麻豆宅宅 | 在线观看成人av | 免费在线黄色av | 日本99热| 1000部18岁以下禁看视频 | 亚洲天堂自拍视频 | 国产精品久久免费看 | 国产精品久久久久永久免费观看 | 亚洲欧美日本一区二区三区 | 国产资源精品 | 天堂久色| 国产亚洲精品日韩在线tv黄 | www久久 | 日韩三级视频在线观看 | 久色小说| 久久精品99国产精品日本 | 欧美 日韩 视频 | 黄色一级大片在线免费看国产一 | 97视频久久久 | 婷婷色影院 | 日韩激情精品 | 国产成人精品亚洲a | 久久久久久久国产精品视频 | 久久九九影视网 | 久久综合狠狠综合久久综合88 | 最新在线你懂的 | 欧美a级在线免费观看 | 免费在线中文字幕 | 免费久久精品视频 | 伊人伊成久久人综合网小说 | 婷婷综合网 | 日本精a在线观看 | 国产中文字幕大全 | 午夜精品久久久久久久久久久久 | 日韩18p| 伊人伊成久久人综合网小说 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 天天操天天操天天爽 | 天天插日日插 | 国产一区二区影院 | 手机在线免费av | 中文字幕九九 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 天堂av网址 | 五月婷丁香网 | 午夜丁香视频在线观看 | 在线中文字幕网站 | 亚洲第一区在线观看 | 中文字幕之中文字幕 | 免费成人av | 日韩性网站 | 午夜精品电影 | 欧美性直播| www.久草.com | 亚洲精品美女视频 | 国产成人亚洲在线观看 | 国产美腿白丝袜足在线av | 91完整视频 | 日韩免费av片 | 日韩电影在线观看一区二区 | 五月天久久 | 波多野结衣电影一区 | 久久黄色小说 | 日韩 在线a | 精品国产一区在线观看 | 久久久久成人免费 | 国产99久久九九精品免费 | 97国产大学生情侣白嫩酒店 | 免费观看午夜视频 | 99精品热视频 | 日本精品久久久久中文字幕 | 摸阴视频| 亚洲视频 一区 | 日日夜夜天天干 | 综合网av | 中文欧美字幕免费 | 一级成人免费 | 午夜视频在线观看一区二区 | 夜夜夜夜爽 | 97av在线| 欧洲一区精品 | 一区免费观看 | 狠狠干在线 | 天天色播| 国产高清在线观看av | 99性视频 | www.亚洲视频.com | 人人澡视频 | 天堂av免费观看 | 成人免费在线视频观看 | 青草视频免费观看 | 亚洲春色综合另类校园电影 | 国产 欧美 日产久久 | 久久久99精品免费观看乱色 | 欧美日韩成人一区 | 97色婷婷| 亚洲精品乱码久久久一二三 | 国产精品二区在线 | 久久久香蕉视频 | 色综合天天综合网国产成人网 | a在线一区 | 四虎8848免费高清在线观看 | 毛片网在线观看 | 久久久国产精品一区二区中文 | 色在线视频网 | 91视频成人免费 | 狠狠的日 | 亚洲视频电影在线 | 91 在线视频播放 | 色婷婷久久| 国产精品高潮在线观看 | 丁香六月天婷婷 | 在线激情小视频 | av理论电影| 日韩在线观看你懂的 | 99久久精品免费看国产四区 | 久久综合中文字幕 | 国产精品一区二区免费 | 国产福利在线免费观看 | 91久久一区二区 | 国产精品爽爽爽 | av电影免费在线 | 久久在草 | 91免费视频网站在线观看 | 国产精品第三页 | 91在线免费播放视频 | 国产99久久久精品 | 亚洲黄网站| 片网站| 人交video另类hd | 婷婷综合激情 | 麻花豆传媒mv在线观看网站 | 成人免费观看av | 天堂在线一区二区 | 久草网站在线观看 | 国产精品一区二区久久久 | 欧美激情第一页xxx 午夜性福利 | 成人黄色在线电影 | 81国产精品久久久久久久久久 | 激情五月网站 | 色在线免费| 国产免费大片 | 国产色久 | 国产一区二区三区视频在线 | 免费观看一级特黄欧美大片 | 亚洲精品中文字幕在线 | 最新黄色av网址 | 看黄色.com | 人人澡人人爱 | 欧美另类xxx| 国产成人免费在线观看 | 免费色av| 亚洲女裸体 | www.夜色321.com| 免费三级av| 狠狠综合久久 | 婷婷综合成人 | 久久综合国产伦精品免费 | 久久99精品国产91久久来源 | 91国内在线视频 | 一区二区三区四区五区在线 | 果冻av在线| 国产a级片免费观看 | 中文字幕在线观看播放 | 免费成人av | 亚洲国产欧美在线看片xxoo | 综合色综合 | 91成人黄色| 久久久亚洲精华液 | 91精品国产乱码在线观看 | av成人在线电影 | 夜夜夜影院| 九九热精品在线 | www欧美日韩 | 国产精品久久久久高潮 | 顶级欧美色妇4khd | 不卡的av在线播放 | 中文字幕 国产视频 | 天天躁天天狠天天透 | 国产精品专区在线 | 久久久久国产精品午夜一区 | 午夜精品影院 | 日韩av电影免费观看 | 97视频免费播放 | www.在线观看视频 | 国产玖玖精品视频 | 中文字幕av专区 | 91麻豆精品国产午夜天堂 | 日韩在线观看视频中文字幕 | 91亚州 | 欧美日韩不卡在线观看 | 91av手机在线观看 | 久久成人精品 | 久久乐九色婷婷综合色狠狠182 | 911国产| 国产精品日韩高清 | 国产剧情一区在线 | 91成人免费 | 免费日韩一区二区 | 免费网站黄 | 美女福利视频在线 | 国产丝袜网站 | 精品视频久久 | 中文字幕在线日本 | 亚洲春色综合另类校园电影 | 国产在线一区观看 | 久久超碰网 | 探花视频免费在线观看 | 亚洲欧美日本国产 | 亚洲综合成人婷婷小说 | 亚洲一级片 | 日韩久久精品一区二区 | 国产精品密入口果冻 | 国产精品久久视频 | 91激情视频在线观看 | 欧美一级片免费播放 | 免费看片成年人 | 日韩区欧美久久久无人区 | 欧美 日韩 性 | 国产精品免费在线播放 | 国产亚洲在线 | 在线视频电影 | 国产精品麻 | 综合色婷婷 | 在线国产日本 | 亚洲 欧洲av | 国产高清成人 | 成人av免费在线播放 | 亚洲国产大片 | 免费精品视频 | 四虎在线观看视频 | 久久网页 | 国产精品一区二区三区99 | 91成人久久 | 黄色一级大片在线观看 | a级片久久| 欧美精品一区二区三区一线天视频 | 韩国av三级 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 天天干干| 免费看的黄网站软件 | 久久久久在线 | 国产精品mv | 在线观看香蕉视频 | 国产99久久久精品 | www日| 久久精品一区二区三区中文字幕 | 亚洲精品午夜久久久久久久久久久 | 午夜av电影| 免费麻豆视频 | 欧美一级免费 | 成人蜜桃 | 一区二区三区在线看 | 成年人在线观看免费视频 | 亚洲免费公开视频 | 91在线最新 | 久久精品成人 | 操高跟美女 | 久久综合五月天婷婷伊人 | 国产精品福利一区 | 我爱av激情网 | 亚洲精品成人网 | 久久精品视频99 | 免费三及片 | 久久精品黄 | 美女一级毛片视频 | 久久久精品一区二区 | 国产对白av | 久久这里只有精品1 | 波多野结衣一区二区三区中文字幕 | 草久草久| 欧美日韩激情网 | 久草视频免费在线播放 | 亚洲最大av网站 | 成人av免费网站 | 一级一片免费看 | 国产精品一区电影 | 中文字幕亚洲精品在线观看 | 国产高清av免费在线观看 | www视频免费在线观看 | 不卡av在线免费观看 | 久久精品99国产精品亚洲最刺激 | 欧美日韩午夜在线 | 97国产在线观看 | 天天曰视频 | 日韩免费视频观看 | 天天草天天草 | 国产精品久久久久久久久岛 | 久久综合久久久 | 午夜精品电影 | 欧美午夜久久 | 亚洲自拍自偷 | 日韩欧美精品在线观看 | 亚洲理论视频 | 免费大片av | 国产一区在线免费观看视频 | 久久久久女人精品毛片 | 亚洲热久久 | 婷婷激情综合网 | 久久久久久久久久久福利 | 国产在线观看你懂的 | 日韩成人免费在线观看 | 福利电影一区二区 | 在线观看亚洲精品视频 | 狠狠色香婷婷久久亚洲精品 | av再线观看| 69精品 | 99精品久久精品一区二区 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 91网站免费观看 | 不卡av在线免费观看 | 亚洲国产精品电影 | 成人久久久电影 | 综合色伊人 | 欧美一级免费黄色片 | 色综合天 | www.在线观看av | 美女久久精品 | 亚洲一级在线观看 | 欧美黑人性猛交 | 久色婷婷 | 久久久久久综合 | 国产精品久久综合 | 国产精品99久久久久的智能播放 | 日韩精品一区二区三区高清免费 | 久久精品系列 | 久久九九网站 | 欧美性生活久久 | 韩日精品中文字幕 | 亚洲最新视频在线 | 久久不卡电影 | 久久免费毛片 | www欧美日韩 | 婷婷激情五月综合 | 99tvdz@gmail.com| 亚洲片在线 | 99精品在线看 | 91手机视频| 国产一级二级三级视频 | 精品国产一区二区三区噜噜噜 | 亚洲精品国产成人 | 亚洲视屏一区 | 9999精品视频| 午夜国产一区 | 美女在线观看网站 | 日本久久精品 | 国产护士hd高朝护士1 | 久久久毛片| 国产在线观看午夜 | 国产一二区在线观看 | 亚洲精品字幕在线观看 | 中文日韩在线视频 | av中文字幕不卡 | 在线观看免费视频你懂的 | 久热电影 | 久久精品牌麻豆国产大山 | 久久久久一区 | 99久久久久成人国产免费 | 天天干天天操天天射 | 97色在线观看免费视频 | 国产视频2| 日韩欧美在线免费 | 色噜噜狠狠色综合中国 | 永久免费在线 | 午夜黄色大片 | 99精品视频播放 | 中文字幕免费高清 | 日本三级吹潮在线 | 五月天丁香综合 | 久99久视频| 国产麻豆精品95视频 | 一个色综合网站 | 亚洲精品一区二区网址 | 色视频在线观看免费 | 欧美日韩在线观看一区二区三区 | 亚洲精品美女免费 | 久久新| 五月天综合网站 | 亚洲理论在线观看电影 | 手机在线中文字幕 | 九九99| 99精品亚洲| 欧美一级片在线播放 | a√资源在线| 看av免费 | avove黑丝 | 免费h在线观看 | 午夜 在线| 91在线porny国产在线看 | 久久伊人五月天 | 欧美日韩国产二区三区 | 日韩精品国产一区 | 天天操综 | 99视频网站 | 国产精品成人久久久久 | 国产精品久久久久久久av大片 | 亚洲精品视频免费在线 | 精品一区免费 | 免费网站看av片 | 免费麻豆网站 | 亚洲免费av观看 | 区一区二区三在线观看 | 黄色中文字幕 | 激情视频国产 | 久久综合婷婷 | 五月天久久激情 | 久久99久久99精品免视看婷婷 | 欧美aaa视频 | 99精品国产成人一区二区 | 国产二区视频在线 | 天天天天射 | 国产午夜精品福利视频 | 亚洲国产精品久久久 | 97视频亚洲 | 中文字幕 国产视频 | 粉嫩aⅴ一区二区三区 | 久久婷亚洲五月一区天天躁 | 亚洲永久精品在线观看 | 亚洲人人爱 | 探花视频在线观看 | 亚洲一区在线看 | 国产不卡视频在线播放 | 中文字幕在线观看av | 国产成人精品一区二区在线 | 久久久久久久久毛片精品 | 99综合电影在线视频 | 久久免费视频99 | 亚洲最大成人免费网站 | 亚洲,国产成人av | 午夜av激情 | 久久免费电影网 | 我要色综合天天 | 免费看一级特黄a大片 | 五月天狠狠操 | 日韩视 | 狠狠干五月天 | 波多野结衣网址 | 成人av影视观看 | 成人一区二区三区在线 | 黄色动态图xx | 亚洲电影久久久 | 亚洲一区二区三区四区在线视频 | av免费观看网站 | www狠狠操 | 91亚洲精品久久久久图片蜜桃 | 国产黄色片在线免费观看 | 黄色99视频 | 黄色免费av | 欧美性黑人 | 综合伊人av| 狠狠色丁香婷婷综合久久片 | 韩国av免费观看 | 天天爱综合 | 香蕉精品视频在线观看 | 少妇bbw揉bbb欧美 | 97视频人人澡人人爽 | 韩日在线一区 | 在线观看一区 | 处女av在线 | 国产爽视频 | 日本性xxxxx 亚洲精品午夜久久久 | 91大神一区二区三区 | 久久亚洲精品电影 | 久久国精品 | 九色免费视频 | 精品国产乱码久久久久久天美 | a√天堂资源 | 欧美色888 | 欧美一级免费 | www91在线| 亚洲视频,欧洲视频 | 五月婷婷在线综合 | 欧美一区二区三区免费观看 | 欧美日韩高清一区 | 国内久久精品 | 色在线中文字幕 | 999成人免费视频 | 国产大陆亚洲精品国产 | 国产日韩欧美在线免费观看 | 久久视频在线观看中文字幕 | 国产精品麻豆一区二区三区 | 欧美日韩xx| 久草免费色站 | 国产精品私人影院 | 波多野结衣在线观看视频 | 超碰成人免费电影 | 在线看日韩 | 亚洲国产精品va在线看 | 成年人免费在线 | 国产精品一区二区免费视频 | 日韩视频一| 亚洲天堂网在线播放 | 夜夜干天天操 | 天天干天天操天天爱 | 日韩性久久 | 丁香5月婷婷久久 | 欧美日韩视频在线观看一区二区 | 国产成人av片 | 在线观看理论 | 精品久久久久久亚洲综合网 | 久久国产视频网 | 超碰免费在线公开 | 久久尤物电影视频在线观看 | 深夜福利视频一区二区 | 在线观看黄色 | 国产96av | 91在线看黄| 亚洲色图美腿丝袜 | 最新真实国产在线视频 | 国内精品久久久久影院优 | 最近更新的中文字幕 | 婷婷国产在线 | 日韩欧美国产激情在线播放 | 国产精品精品久久久久久 | 国产精品人成电影在线观看 | 国产区精品在线 | 久久国产精品99久久久久 | 四虎精品成人免费网站 | 一级免费片 | 成人福利在线播放 | 精品国产乱码一区二区三区在线 | 天天干天天干天天干天天干天天干天天干 | 99视频在线播放 | 精品国内自产拍在线观看视频 | 在线观看岛国 | 二区中文字幕 | 亚洲成人午夜av | 国产视频18 | 美女网站久久 | va视频在线 | 四虎海外影库www4hu | 国产 成人 久久 | 日韩色综合网 | www天天干 | 色久天| 亚洲欧洲在线视频 | 精品亚洲一区二区 | 2022国产精品视频 | 亚洲美女免费精品视频在线观看 | 91精品国自产在线观看欧美 | 91精品在线视频 | 福利视频一二区 | 亚洲一级片在线看 | 国产精品成人久久久 | 免费视频91蜜桃 | 中文字幕色在线 | 超碰在线1| 96亚洲精品久久久蜜桃 | 久久婷婷一区二区三区 | 99视频久 | 精品国产乱码久久 | 日韩成人免费在线电影 | 悠悠av资源片 | 中文字幕在线免费播放 | 少妇自拍av | 成人av一区二区在线观看 | 国产尤物视频在线 | 国产老熟| 国产成人精品一区二区三区福利 | 国产精品99久久免费观看 | 国产不卡在线观看视频 | 久久国产精品视频 | 日韩在线视频二区 | 久久艹在线观看 | 久久久久久久久久久影视 | 一级电影免费在线观看 | 美女视频网 | 日韩欧美91| 亚洲高清视频在线观看免费 | 激情综合啪 | 欧美色插| 亚洲视频免费在线看 | 婷婷六月天在线 | 国产生活一级片 | 少妇精品久久久一区二区免费 | 免费国产一区二区视频 | 人人添人人澡 | av丝袜在线 | 91成人精品在线 | 午夜视频黄 | 综合激情| 亚洲国产av精品毛片鲁大师 | 婷婷天天色 | 免费在线视频一区二区 | 色吊丝在线永久观看最新版本 | 亚洲国产精品传媒在线观看 | 精品久久久影院 | 91视频 - 88av | 日日日操 | 亚洲伦理一区 | 日韩中文字幕免费在线播放 | 久久在线影院 | 欧美日韩在线观看一区二区三区 | 精品成人网| 亚洲精品www| 欧美日韩视频在线一区 | 99色在线观看 | 欧美黄色软件 | 奇米777777| 欧美有色| 久久成人黄色 | 99精品成人 | 中文字幕在线观看2018 | 黄色aa久久 | 天天激情综合网 | 成人影视免费 | 五月激情婷婷丁香 | 一区二区在线电影 | 久久黄色免费观看 | 国产精品色婷婷视频 | 日韩精品一区在线播放 | 黄色片网站免费 | 国产综合福利在线 | 在线久草视频 | 国产精品中文字幕在线播放 | 最新av在线网址 | 亚洲五月婷 | 在线播放国产一区二区三区 | 日日夜夜操av | 在线观看视频亚洲 | 日韩一区在线播放 | 国产99久久久国产精品 | 日韩免费一区二区在线观看 | 99re视频在线观看 | 五月婷婷国产 | 五月婷婷综合久久 | 成人黄色毛片 | 亚洲精品短视频 | 国产小视频在线观看免费 | 国产视频一二三 | 久久伦理视频 | 久久久久久久影视 | 免费看十八岁美女 | 97成人精品| av手机在线播放 | 超碰在线成人 | 黄色av网站在线观看 | 欧美性精品 | 亚洲精品视频在线观看免费视频 | www.av在线.com| 综合色中色 | av电影不卡在线 | 久久成人综合视频 | 97在线观看免费视频 | 日韩三级精品 | 深夜福利视频在线观看 | 91中文在线视频 | 日韩城人在线 | 国产成人黄色av | 亚洲国产精品va在线 | 97国产在线观看 | 久久影视一区二区 | 毛片二区 | 久久与婷婷 | 天天爱综合| 国产女做a爱免费视频 | 成人av片在线观看 | 久久男人中文字幕资源站 | 亚洲精品乱码久久久一二三 | 久久经典国产视频 | 天无日天天操天天干 | 又黄又爽又无遮挡的视频 | aaa日本高清在线播放免费观看 | 日韩免费区 | 天天噜天天色 | 国产在线观看你懂得 | 国产尤物视频在线 | 日本午夜在线观看 | 天堂av在线网站 | 国产精品一区免费在线观看 | 亚洲 欧美变态 另类 综合 | 国产免费观看久久 | 免费观看特级毛片 | 欧美-第1页-屁屁影院 | 亚洲欧美在线观看视频 | 日韩中文在线观看 | 久久精品79国产精品 | 福利一区二区三区四区 | 亚洲天堂首页 | 亚洲午夜小视频 | 天天色欧美| 深爱激情五月网 | 久久久色 | 91av电影在线 | 久久tv| 亚洲一区二区视频 | 久久国产91| 97av精品 | 午夜在线国产 | 在线观看电影av | 国产黄色免费在线观看 | 久久99久久99精品免费看小说 | 欧美久久久久久久久中文字幕 | 最新91在线视频 | 亚洲涩涩涩涩涩涩 | 人人爱人人舔 | 亚州激情视频 | 欧美日比视频 | 人人爱爱 | 四虎影视成人永久免费观看视频 | 在线观看的黄色 | 四虎8848免费高清在线观看 | 麻豆视频入口 | 国产中文在线字幕 | 日本精品二区 | 欧美一级片在线观看视频 | 久久狠狠一本精品综合网 | 99电影| 久久99国产视频 | 国产一级免费在线观看 | 亚洲国产视频在线 | 草久在线视频 | 91精品国产成 | 一区二区在线电影 | 天天天天天天操 | 国产原创91 | 超碰人在线 | 麻豆小视频在线观看 | 五月婷婷视频 | 日韩影片在线观看 | 免费男女羞羞的视频网站中文字幕 | 亚洲精品国产自产拍在线观看 | 成人免费av电影 | 国产精品午夜免费福利视频 | 91色亚洲| 91视频亚洲 | 九九在线国产视频 | 激情综合网五月婷婷 | 91福利视频免费观看 | 国产精品久久久久久久婷婷 | 毛片99| 久草视频免费看 | 黄色免费看片网站 | 91重口视频 | 91香蕉亚洲精品 | 国产va精品免费观看 | 中文字幕在线免费观看 | 久久国产日韩 | 精品你懂的 | 在线 视频 亚洲 | 国产精品美女久久久久aⅴ 干干夜夜 | 波多野结衣视频一区二区三区 | 在线国产一区 | 九色精品免费永久在线 | 久久免费精品 | 黄色一级免费 | 狠狠操导航| 九七人人干 | 亚洲精选视频在线 | 国产精品18videosex性欧美 | 一区在线播放 | 国产婷婷一区二区 | 国产一区视频免费在线观看 | 国产精品九色 | 国产成人1区 | 成人小视频在线免费观看 | 国产精品一区二区三区四 | 激情小说网站亚洲综合网 | 岛国一区在线 | 色婷婷五 | 在线观看国产永久免费视频 | 欧美精彩视频在线观看 | 国产成人在线看 | 成片视频在线观看 | 午夜久久久久久久久久影院 | 国产网红在线观看 | 有码一区二区三区 | 国产最新视频在线 | 日本二区三区在线 | 欧美一级片在线 | 日韩成人高清在线 | 精品久久一区二区三区 | 欧美激情视频一区二区三区 | 五月天久久狠狠 | 国产精品麻豆视频 | 久久久精品成人 | 国内久久久久久 | 国产精品久久久久久欧美 | 亚洲视频免费在线看 | 美女精品在线观看 | 日本黄色a级大片 | www.激情五月.com| 国产精品久久久久影院 | 特级片免费看 | 亚洲欧美国产精品久久久久 | 国产视频欧美视频 | 婷婷色网视频在线播放 | 黄污网站在线 | 伊人婷婷综合 | 日本高清中文字幕有码在线 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 日韩视频免费观看高清完整版在线 | 午夜精品久久久 | 在线观看视频色 | 色网站中文字幕 | 久久亚洲欧美 | 久久免费视频4 | 国产精品久久久久婷婷二区次 | 久久精品久久久久久久 | 国产午夜精品一区二区三区在线观看 | 精品国模一区二区 | 一区二区免费不卡在线 | 中文国产在线观看 | 精品一区二区影视 | 亚洲国产日韩精品 | 96看片 | 欧美色图p| 欧美成人xxxx | 韩日av一区二区 | 在线观看国产福利片 | 夜夜躁日日躁狠狠躁 | 亚洲人成在|