锘??xml version="1.0" encoding="utf-8" standalone="yes"?>一本一道久久综合狠狠老精东影业 ,久久精品亚洲一区二区三区浴池,久久久九九九九http://m.shnenglu.com/true/category/3966.htmlzh-cnFri, 25 Sep 2009 13:58:55 GMTFri, 25 Sep 2009 13:58:55 GMT60C++緇撴瀯浣撳簭鍒楀寲鐨勪竴鐐規濊?/title><link>http://m.shnenglu.com/true/archive/2009/09/24/97087.html</link><dc:creator>true</dc:creator><author>true</author><pubDate>Wed, 23 Sep 2009 19:03:00 GMT</pubDate><guid>http://m.shnenglu.com/true/archive/2009/09/24/97087.html</guid><wfw:comment>http://m.shnenglu.com/true/comments/97087.html</wfw:comment><comments>http://m.shnenglu.com/true/archive/2009/09/24/97087.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://m.shnenglu.com/true/comments/commentRss/97087.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/true/services/trackbacks/97087.html</trackback:ping><description><![CDATA[     鎽樿: C++緇撴瀯浣撳簭鍒楀寲 libprotobuf  <a href='http://m.shnenglu.com/true/archive/2009/09/24/97087.html'>闃呰鍏ㄦ枃</a><img src ="http://m.shnenglu.com/true/aggbug/97087.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/true/" target="_blank">true</a> 2009-09-24 03:03 <a href="http://m.shnenglu.com/true/archive/2009/09/24/97087.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鍗忚璁捐涔嬩簩 緇撴瀯浣撶被鍨嬬殑緙栫爜http://m.shnenglu.com/true/archive/2009/09/11/95949.htmltruetrueFri, 11 Sep 2009 11:35:00 GMThttp://m.shnenglu.com/true/archive/2009/09/11/95949.htmlhttp://m.shnenglu.com/true/comments/95949.htmlhttp://m.shnenglu.com/true/archive/2009/09/11/95949.html#Feedback0http://m.shnenglu.com/true/comments/commentRss/95949.htmlhttp://m.shnenglu.com/true/services/trackbacks/95949.html闃呰鍏ㄦ枃

true 2009-09-11 19:35 鍙戣〃璇勮
]]>
鍗忚璁捐涔嬩竴 鍩烘湰綾誨瀷鐨勭紪鐮?/title><link>http://m.shnenglu.com/true/archive/2009/09/11/95873.html</link><dc:creator>true</dc:creator><author>true</author><pubDate>Thu, 10 Sep 2009 20:12:00 GMT</pubDate><guid>http://m.shnenglu.com/true/archive/2009/09/11/95873.html</guid><wfw:comment>http://m.shnenglu.com/true/comments/95873.html</wfw:comment><comments>http://m.shnenglu.com/true/archive/2009/09/11/95873.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://m.shnenglu.com/true/comments/commentRss/95873.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/true/services/trackbacks/95873.html</trackback:ping><description><![CDATA[     鎽樿: 鍗忚璁捐鐨勫熀紜閮ㄥ垎錛屽熀鏈被鍨嬬殑緙栫爜錛屽弬鑰冧簡libprotobuf  <a href='http://m.shnenglu.com/true/archive/2009/09/11/95873.html'>闃呰鍏ㄦ枃</a><img src ="http://m.shnenglu.com/true/aggbug/95873.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/true/" target="_blank">true</a> 2009-09-11 04:12 <a href="http://m.shnenglu.com/true/archive/2009/09/11/95873.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>瀛楃杞崲錛堣漿杞斤級http://m.shnenglu.com/true/archive/2007/11/18/36895.htmltruetrueSun, 18 Nov 2007 11:48:00 GMThttp://m.shnenglu.com/true/archive/2007/11/18/36895.htmlhttp://m.shnenglu.com/true/comments/36895.htmlhttp://m.shnenglu.com/true/archive/2007/11/18/36895.html#Feedback0http://m.shnenglu.com/true/comments/commentRss/36895.htmlhttp://m.shnenglu.com/true/services/trackbacks/36895.html 

涓 C++ 涓?string涓巜string浜掕漿

鏂規硶涓錛?/p>

string WideToMutilByte(const wstring& _src)
{
int nBufSize = WideCharToMultiByte(GetACP(), 0, _src.c_str(),-1, NULL, 0, 0, FALSE);

char *szBuf = new char[nBufSize];

WideCharToMultiByte(GetACP(), 0, _src.c_str(),-1, szBuf, nBufSize, 0, FALSE);

string strRet(szBuf);

delete []szBuf;
szBuf = NULL;

return strRet;
}

wstring MutilByteToWide(const string& _src)
{
//璁$畻瀛楃涓?string 杞垚 wchar_t 涔嬪悗鍗犵敤鐨勫唴瀛樺瓧鑺傛暟
int nBufSize = MultiByteToWideChar(GetACP(),0,_src.c_str(),-1,NULL,0);

//涓?wsbuf 鍒嗛厤鍐呭瓨 BufSize 涓瓧鑺?br>wchar_t *wsBuf = new wchar_t[nBufSize];

//杞寲涓?unicode 鐨?WideString
MultiByteToWideChar(GetACP(),0,_src.c_str(),-1,wsBuf,nBufSize);

wstring wstrRet(wsBuf);

delete []wsBuf;
wsBuf = NULL;

return wstrRet;
}

 


杞澆錛歝sdn

榪欑瘒鏂囩珷閲岋紝鎴戝皢緇欏嚭鍑犵C++ std::string鍜宻td::wstring鐩鎬簰杞崲鐨勮漿鎹㈡柟娉曘?br> 
絎竴縐嶆柟娉曪細璋冪敤WideCharToMultiByte()鍜孧ultiByteToWideChar()錛屼唬鐮佸涓嬶紙鍏充簬璇︾粏鐨勮В閲婏紝鍙互鍙傝冦妛indows鏍稿績緙栫▼銆嬶級錛?br> 

#include <string>
#include <windows.h>
using namespace std;
//Converting a WChar string to a Ansi string
std::string WChar2Ansi(LPCWSTR pwszSrc)
{
         int nLen = WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, NULL, 0, NULL, NULL);
 
         if (nLen<= 0) return std::string("");
 
         char* pszDst = new char[nLen];
         if (NULL == pszDst) return std::string("");
 
         WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, pszDst, nLen, NULL, NULL);
         pszDst[nLen -1] = 0;
 
         std::string strTemp(pszDst);
         delete [] pszDst;
 
         return strTemp;
}

 
string ws2s(wstring& inputws)
{
        return WChar2Ansi(inputws.c_str());
}

 

 
//Converting a Ansi string to WChar string


std::wstring Ansi2WChar(LPCSTR pszSrc, int nLen)
 
{
    int nSize = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)pszSrc, nLen, 0, 0);
    if(nSize <= 0) return NULL;
 
         WCHAR *pwszDst = new WCHAR[nSize+1];
    if( NULL == pwszDst) return NULL;
 
    MultiByteToWideChar(CP_ACP, 0,(LPCSTR)pszSrc, nLen, pwszDst, nSize);
    pwszDst[nSize] = 0;
 
    if( pwszDst[0] == 0xFEFF)                    // skip Oxfeff
        for(int i = 0; i < nSize; i ++)
                            pwszDst[i] = pwszDst[i+1];
 
    wstring wcharString(pwszDst);
         delete pwszDst;
 
    return wcharString;
}

 
std::wstring s2ws(const string& s)
{
     return Ansi2WChar(s.c_str(),s.size());
}


 
 
絎簩縐嶆柟娉曪細閲囩敤ATL灝佽_bstr_t鐨勮繃娓★細錛堟敞錛宊bstr_鏄疢icrosoft Specific鐨勶紝鎵浠ヤ笅闈唬鐮佸彲浠ュ湪VS2005閫氳繃錛屾棤縐繪鎬э級錛?/p>


#include <string>
#include <comutil.h>
using namespace std;
#pragma comment(lib, "comsuppw.lib")
 
string ws2s(const wstring& ws);
wstring s2ws(const string& s);
 
string ws2s(const wstring& ws)
{
         _bstr_t t = ws.c_str();
         char* pchar = (char*)t;
         string result = pchar;
         return result;
}

 
wstring s2ws(const string& s)
{
         _bstr_t t = s.c_str();
         wchar_t* pwchar = (wchar_t*)t;
         wstring result = pwchar;
         return result;
}


 
絎笁縐嶆柟娉曪細浣跨敤CRT搴撶殑mbstowcs()鍑芥暟鍜寃cstombs()鍑芥暟錛屽鉤鍙版棤鍏籌紝闇璁懼畾locale銆?/p>


#include <string>
#include <locale.h>
using namespace std;
string ws2s(const wstring& ws)
{
         string curLocale = setlocale(LC_ALL, NULL);        // curLocale = "C";
 
         setlocale(LC_ALL, "chs");
 
         const wchar_t* _Source = ws.c_str();
         size_t _Dsize = 2 * ws.size() + 1;
         char *_Dest = new char[_Dsize];
         memset(_Dest,0,_Dsize);
         wcstombs(_Dest,_Source,_Dsize);
         string result = _Dest;
         delete []_Dest;
 
         setlocale(LC_ALL, curLocale.c_str());
 
         return result;
}

 
wstring s2ws(const string& s)
{
         setlocale(LC_ALL, "chs");
 
         const char* _Source = s.c_str();
         size_t _Dsize = s.size() + 1;
         wchar_t *_Dest = new wchar_t[_Dsize];
         wmemset(_Dest, 0, _Dsize);
         mbstowcs(_Dest,_Source,_Dsize);
         wstring result = _Dest;
         delete []_Dest;
 
         setlocale(LC_ALL, "C");
 
         return result;
}


浜?utf8.utf16.utf32鐨勭浉浜掕漿鍖?/p>

鍙互鍙傝僓nicode.org 涓婃湁ConvertUTF.c鍜孋onvertUTF.h 錛堜笅杞藉湴鍧錛?a >http://www.unicode.org/Public/PROGRAMS/CVTUTF/錛?/p>

瀹炵幇鏂囦歡ConvertUTF.c錛氾紙.h鐪侊級
/**//*
 * Copyright 2001-2004 Unicode, Inc.
 *
 * Disclaimer
 *
 * This source code is provided as is by Unicode, Inc. No claims are
 * made as to fitness for any particular purpose. No warranties of any
 * kind are expressed or implied. The recipient agrees to determine
 * applicability of information provided. If this file has been
 * purchased on magnetic or optical media from Unicode, Inc., the
 * sole remedy for any claim will be exchange of defective media
 * within 90 days of receipt.
 *
 * Limitations on Rights to Redistribute This Code
 *
 * Unicode, Inc. hereby grants the right to freely use the information
 * supplied in this file in the creation of products supporting the
 * Unicode Standard, and to make copies of this file in any form
 * for internal or external distribution as long as this notice
 * remains attached.
 */

/**//* ---------------------------------------------------------------------

    Conversions between UTF32, UTF-16, and UTF-8. Source code file.
    Author: Mark E. Davis, 1994.
    Rev History: Rick McGowan, fixes & updates May 2001.
    Sept 2001: fixed const & error conditions per
    mods suggested by S. Parent & A. Lillich.
    June 2002: Tim Dodd added detection and handling of incomplete
    source sequences, enhanced error detection, added casts
    to eliminate compiler warnings.
    July 2003: slight mods to back out aggressive FFFE detection.
    Jan 2004: updated switches in from-UTF8 conversions.
    Oct 2004: updated to use UNI_MAX_LEGAL_UTF32 in UTF-32 conversions.

    See the header file "ConvertUTF.h" for complete documentation.

------------------------------------------------------------------------ */


#include "ConvertUTF.h"
#ifdef CVTUTF_DEBUG
#include <stdio.h>
#endif

static const int halfShift  = 10; /**//* used for shifting by 10 bits */

static const UTF32 halfBase = 0x0010000UL;
static const UTF32 halfMask = 0x3FFUL;

#define UNI_SUR_HIGH_START  (UTF32)0xD800
#define UNI_SUR_HIGH_END    (UTF32)0xDBFF
#define UNI_SUR_LOW_START   (UTF32)0xDC00
#define UNI_SUR_LOW_END     (UTF32)0xDFFF
#define false       0
#define true        1

/**//* --------------------------------------------------------------------- */

ConversionResult ConvertUTF32toUTF16 (
    const UTF32** sourceStart, const UTF32* sourceEnd,
    UTF16** targetStart, UTF16* targetEnd, ConversionFlags flags) {
    ConversionResult result = conversionOK;
    const UTF32* source = *sourceStart;
    UTF16* target = *targetStart;
    while (source < sourceEnd) {
    UTF32 ch;
    if (target >= targetEnd) {
        result = targetExhausted; break;
    }
    ch = *source++;
    if (ch <= UNI_MAX_BMP) { /**//* Target is a character <= 0xFFFF */
        /**//* UTF-16 surrogate values are illegal in UTF-32; 0xffff or 0xfffe are both reserved values */
        if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) {
        if (flags == strictConversion) {
            --source; /**//* return to the illegal value itself */
            result = sourceIllegal;
            break;
        } else {
            *target++ = UNI_REPLACEMENT_CHAR;
        }
        } else {
        *target++ = (UTF16)ch; /**//* normal case */
        }
    } else if (ch > UNI_MAX_LEGAL_UTF32) {
        if (flags == strictConversion) {
        result = sourceIllegal;
        } else {
        *target++ = UNI_REPLACEMENT_CHAR;
        }
    } else {
        /**//* target is a character in range 0xFFFF - 0x10FFFF. */
        if (target + 1 >= targetEnd) {
        --source; /**//* Back up source pointer! */
        result = targetExhausted; break;
        }
        ch -= halfBase;
        *target++ = (UTF16)((ch >> halfShift) + UNI_SUR_HIGH_START);
        *target++ = (UTF16)((ch & halfMask) + UNI_SUR_LOW_START);
    }
    }
    *sourceStart = source;
    *targetStart = target;
    return result;
}

/**//* --------------------------------------------------------------------- */

ConversionResult ConvertUTF16toUTF32 (
    const UTF16** sourceStart, const UTF16* sourceEnd,
    UTF32** targetStart, UTF32* targetEnd, ConversionFlags flags) {
    ConversionResult result = conversionOK;
    const UTF16* source = *sourceStart;
    UTF32* target = *targetStart;
    UTF32 ch, ch2;
    while (source < sourceEnd) {
    const UTF16* oldSource = source; /**//*  In case we have to back up because of target overflow. */
    ch = *source++;
    /**//* If we have a surrogate pair, convert to UTF32 first. */
    if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_HIGH_END) {
        /**//* If the 16 bits following the high surrogate are in the source buffer */
        if (source < sourceEnd) {
        ch2 = *source;
        /**//* If it's a low surrogate, convert to UTF32. */
        if (ch2 >= UNI_SUR_LOW_START && ch2 <= UNI_SUR_LOW_END) {
            ch = ((ch - UNI_SUR_HIGH_START) << halfShift)
            + (ch2 - UNI_SUR_LOW_START) + halfBase;
            ++source;
        } else if (flags == strictConversion) { /**//* it's an unpaired high surrogate */
            --source; /**//* return to the illegal value itself */
            result = sourceIllegal;
            break;
        }
        } else { /**//* We don't have the 16 bits following the high surrogate. */
        --source; /**//* return to the high surrogate */
        result = sourceExhausted;
        break;
        }
    } else if (flags == strictConversion) {
        /**//* UTF-16 surrogate values are illegal in UTF-32 */
        if (ch >= UNI_SUR_LOW_START && ch <= UNI_SUR_LOW_END) {
        --source; /**//* return to the illegal value itself */
        result = sourceIllegal;
        break;
        }
    }
    if (target >= targetEnd) {
        source = oldSource; /**//* Back up source pointer! */
        result = targetExhausted; break;
    }
    *target++ = ch;
    }
    *sourceStart = source;
    *targetStart = target;
#ifdef CVTUTF_DEBUG
if (result == sourceIllegal) {
    fprintf(stderr, "ConvertUTF16toUTF32 illegal seq 0x%04x,%04x\n", ch, ch2);
    fflush(stderr);
}
#endif
    return result;
}

/**//* --------------------------------------------------------------------- */

/**//*
 * Index into the table below with the first byte of a UTF-8 sequence to
 * get the number of trailing bytes that are supposed to follow it.
 * Note that *legal* UTF-8 values can't have 4 or 5-bytes. The table is
 * left as-is for anyone who may want to do such conversion, which was
 * allowed in earlier algorithms.
 */
static const char trailingBytesForUTF8[256] = {
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5
};

/**//*
 * Magic values subtracted from a buffer value during UTF8 conversion.
 * This table contains as many values as there might be trailing bytes
 * in a UTF-8 sequence.
 */
static const UTF32 offsetsFromUTF8[6] = { 0x00000000UL, 0x00003080UL, 0x000E2080UL,
             0x03C82080UL, 0xFA082080UL, 0x82082080UL };

/**//*
 * Once the bits are split out into bytes of UTF-8, this is a mask OR-ed
 * into the first byte, depending on how many bytes follow.  There are
 * as many entries in this table as there are UTF-8 sequence types.
 * (I.e., one byte sequence, two byte etc.). Remember that sequencs
 * for *legal* UTF-8 will be 4 or fewer bytes total.
 */
static const UTF8 firstByteMark[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC };

/**//* --------------------------------------------------------------------- */

/**//* The interface converts a whole buffer to avoid function-call overhead.
 * Constants have been gathered. Loops & conditionals have been removed as
 * much as possible for efficiency, in favor of drop-through switches.
 * (See "Note A" at the bottom of the file for equivalent code.)
 * If your compiler supports it, the "isLegalUTF8" call can be turned
 * into an inline function.
 */

/**//* --------------------------------------------------------------------- */

ConversionResult ConvertUTF16toUTF8 (
    const UTF16** sourceStart, const UTF16* sourceEnd,
    UTF8** targetStart, UTF8* targetEnd, ConversionFlags flags) {
    ConversionResult result = conversionOK;
    const UTF16* source = *sourceStart;
    UTF8* target = *targetStart;
    while (source < sourceEnd) {
    UTF32 ch;
    unsigned short bytesToWrite = 0;
    const UTF32 byteMask = 0xBF;
    const UTF32 byteMark = 0x80;
    const UTF16* oldSource = source; /**//* In case we have to back up because of target overflow. */
    ch = *source++;
    /**//* If we have a surrogate pair, convert to UTF32 first. */
    if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_HIGH_END) {
        /**//* If the 16 bits following the high surrogate are in the source buffer */
        if (source < sourceEnd) {
        UTF32 ch2 = *source;
        /**//* If it's a low surrogate, convert to UTF32. */
        if (ch2 >= UNI_SUR_LOW_START && ch2 <= UNI_SUR_LOW_END) {
            ch = ((ch - UNI_SUR_HIGH_START) << halfShift)
            + (ch2 - UNI_SUR_LOW_START) + halfBase;
            ++source;
        } else if (flags == strictConversion) { /**//* it's an unpaired high surrogate */
            --source; /**//* return to the illegal value itself */
            result = sourceIllegal;
            break;
        }
        } else { /**//* We don't have the 16 bits following the high surrogate. */
        --source; /**//* return to the high surrogate */
        result = sourceExhausted;
        break;
        }
    } else if (flags == strictConversion) {
        /**//* UTF-16 surrogate values are illegal in UTF-32 */
        if (ch >= UNI_SUR_LOW_START && ch <= UNI_SUR_LOW_END) {
        --source; /**//* return to the illegal value itself */
        result = sourceIllegal;
        break;
        }
    }
    /**//* Figure out how many bytes the result will require */
    if (ch < (UTF32)0x80) {         bytesToWrite = 1;
    } else if (ch < (UTF32)0x800) {     bytesToWrite = 2;
    } else if (ch < (UTF32)0x10000) {   bytesToWrite = 3;
    } else if (ch < (UTF32)0x110000) {  bytesToWrite = 4;
    } else {                bytesToWrite = 3;
                        ch = UNI_REPLACEMENT_CHAR;
    }

    target += bytesToWrite;
    if (target > targetEnd) {
        source = oldSource; /**//* Back up source pointer! */
        target -= bytesToWrite; result = targetExhausted; break;
    }
    switch (bytesToWrite) { /**//* note: everything falls through. */
        case 4: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6;
        case 3: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6;
        case 2: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6;
        case 1: *--target =  (UTF8)(ch | firstByteMark[bytesToWrite]);
    }
    target += bytesToWrite;
    }
    *sourceStart = source;
    *targetStart = target;
    return result;
}

/**//* --------------------------------------------------------------------- */

/**//*
 * Utility routine to tell whether a sequence of bytes is legal UTF-8.
 * This must be called with the length pre-determined by the first byte.
 * If not calling this from ConvertUTF8to*, then the length can be set by:
 *  length = trailingBytesForUTF8[*source]+1;
 * and the sequence is illegal right away if there aren't that many bytes
 * available.
 * If presented with a length > 4, this returns false.  The Unicode
 * definition of UTF-8 goes up to 4-byte sequences.
 */

static Boolean isLegalUTF8(const UTF8 *source, int length) {
    UTF8 a;
    const UTF8 *srcptr = source+length;
    switch (length) {
    default: return false;
    /**//* Everything else falls through when "true" */
    case 4: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return false;
    case 3: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return false;
    case 2: if ((a = (*--srcptr)) > 0xBF) return false;

    switch (*source) {
        /**//* no fall-through in this inner switch */
        case 0xE0: if (a < 0xA0) return false; break;
        case 0xED: if (a > 0x9F) return false; break;
        case 0xF0: if (a < 0x90) return false; break;
        case 0xF4: if (a > 0x8F) return false; break;
        default:   if (a < 0x80) return false;
    }

    case 1: if (*source >= 0x80 && *source < 0xC2) return false;
    }
    if (*source > 0xF4) return false;
    return true;
}

/**//* --------------------------------------------------------------------- */

/**//*
 * Exported function to return whether a UTF-8 sequence is legal or not.
 * This is not used here; it's just exported.
 */
Boolean isLegalUTF8Sequence(const UTF8 *source, const UTF8 *sourceEnd) {
    int length = trailingBytesForUTF8[*source]+1;
    if (source+length > sourceEnd) {
    return false;
    }
    return isLegalUTF8(source, length);
}

/**//* --------------------------------------------------------------------- */

ConversionResult ConvertUTF8toUTF16 (
    const UTF8** sourceStart, const UTF8* sourceEnd,
    UTF16** targetStart, UTF16* targetEnd, ConversionFlags flags) {
    ConversionResult result = conversionOK;
    const UTF8* source = *sourceStart;
    UTF16* target = *targetStart;
    while (source < sourceEnd) {
    UTF32 ch = 0;
    unsigned short extraBytesToRead = trailingBytesForUTF8[*source];
    if (source + extraBytesToRead >= sourceEnd) {
        result = sourceExhausted; break;
    }
    /**//* Do this check whether lenient or strict */
    if (! isLegalUTF8(source, extraBytesToRead+1)) {
        result = sourceIllegal;
        break;
    }
    /**//*
     * The cases all fall through. See "Note A" below.
     */
    switch (extraBytesToRead) {
        case 5: ch += *source++; ch <<= 6; /**//* remember, illegal UTF-8 */
        case 4: ch += *source++; ch <<= 6; /**//* remember, illegal UTF-8 */
        case 3: ch += *source++; ch <<= 6;
        case 2: ch += *source++; ch <<= 6;
        case 1: ch += *source++; ch <<= 6;
        case 0: ch += *source++;
    }
    ch -= offsetsFromUTF8[extraBytesToRead];

    if (target >= targetEnd) {
        source -= (extraBytesToRead+1); /**//* Back up source pointer! */
        result = targetExhausted; break;
    }
    if (ch <= UNI_MAX_BMP) { /**//* Target is a character <= 0xFFFF */
        /**//* UTF-16 surrogate values are illegal in UTF-32 */
        if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) {
        if (flags == strictConversion) {
            source -= (extraBytesToRead+1); /**//* return to the illegal value itself */
            result = sourceIllegal;
            break;
        } else {
            *target++ = UNI_REPLACEMENT_CHAR;
        }
        } else {
        *target++ = (UTF16)ch; /**//* normal case */
        }
    } else if (ch > UNI_MAX_UTF16) {
        if (flags == strictConversion) {
        result = sourceIllegal;
        source -= (extraBytesToRead+1); /**//* return to the start */
        break; /**//* Bail out; shouldn't continue */
        } else {
        *target++ = UNI_REPLACEMENT_CHAR;
        }
    } else {
        /**//* target is a character in range 0xFFFF - 0x10FFFF. */
        if (target + 1 >= targetEnd) {
        source -= (extraBytesToRead+1); /**//* Back up source pointer! */
        result = targetExhausted; break;
        }
        ch -= halfBase;
        *target++ = (UTF16)((ch >> halfShift) + UNI_SUR_HIGH_START);
        *target++ = (UTF16)((ch & halfMask) + UNI_SUR_LOW_START);
    }
    }
    *sourceStart = source;
    *targetStart = target;
    return result;
}

/**//* --------------------------------------------------------------------- */

ConversionResult ConvertUTF32toUTF8 (
    const UTF32** sourceStart, const UTF32* sourceEnd,
    UTF8** targetStart, UTF8* targetEnd, ConversionFlags flags) {
    ConversionResult result = conversionOK;
    const UTF32* source = *sourceStart;
    UTF8* target = *targetStart;
    while (source < sourceEnd) {
    UTF32 ch;
    unsigned short bytesToWrite = 0;
    const UTF32 byteMask = 0xBF;
    const UTF32 byteMark = 0x80;
    ch = *source++;
    if (flags == strictConversion ) {
        /**//* UTF-16 surrogate values are illegal in UTF-32 */
        if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) {
        --source; /**//* return to the illegal value itself */
        result = sourceIllegal;
        break;
        }
    }
    /**//*
     * Figure out how many bytes the result will require. Turn any
     * illegally large UTF32 things (> Plane 17) into replacement chars.
     */
    if (ch < (UTF32)0x80) {         bytesToWrite = 1;
    } else if (ch < (UTF32)0x800) {     bytesToWrite = 2;
    } else if (ch < (UTF32)0x10000) {   bytesToWrite = 3;
    } else if (ch <= UNI_MAX_LEGAL_UTF32) {  bytesToWrite = 4;
    } else {                bytesToWrite = 3;
                        ch = UNI_REPLACEMENT_CHAR;
                        result = sourceIllegal;
    }
   
    target += bytesToWrite;
    if (target > targetEnd) {
        --source; /**//* Back up source pointer! */
        target -= bytesToWrite; result = targetExhausted; break;
    }
    switch (bytesToWrite) { /**//* note: everything falls through. */
        case 4: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6;
        case 3: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6;
        case 2: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6;
        case 1: *--target = (UTF8) (ch | firstByteMark[bytesToWrite]);
    }
    target += bytesToWrite;
    }
    *sourceStart = source;
    *targetStart = target;
    return result;
}

/**//* --------------------------------------------------------------------- */

ConversionResult ConvertUTF8toUTF32 (
    const UTF8** sourceStart, const UTF8* sourceEnd,
    UTF32** targetStart, UTF32* targetEnd, ConversionFlags flags) {
    ConversionResult result = conversionOK;
    const UTF8* source = *sourceStart;
    UTF32* target = *targetStart;
    while (source < sourceEnd) {
    UTF32 ch = 0;
    unsigned short extraBytesToRead = trailingBytesForUTF8[*source];
    if (source + extraBytesToRead >= sourceEnd) {
        result = sourceExhausted; break;
    }
    /**//* Do this check whether lenient or strict */
    if (! isLegalUTF8(source, extraBytesToRead+1)) {
        result = sourceIllegal;
        break;
    }
    /**//*
     * The cases all fall through. See "Note A" below.
     */
    switch (extraBytesToRead) {
        case 5: ch += *source++; ch <<= 6;
        case 4: ch += *source++; ch <<= 6;
        case 3: ch += *source++; ch <<= 6;
        case 2: ch += *source++; ch <<= 6;
        case 1: ch += *source++; ch <<= 6;
        case 0: ch += *source++;
    }
    ch -= offsetsFromUTF8[extraBytesToRead];

    if (target >= targetEnd) {
        source -= (extraBytesToRead+1); /**//* Back up the source pointer! */
        result = targetExhausted; break;
    }
    if (ch <= UNI_MAX_LEGAL_UTF32) {
        /**//*
         * UTF-16 surrogate values are illegal in UTF-32, and anything
         * over Plane 17 (> 0x10FFFF) is illegal.
         */
        if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) {
        if (flags == strictConversion) {
            source -= (extraBytesToRead+1); /**//* return to the illegal value itself */
            result = sourceIllegal;
            break;
        } else {
            *target++ = UNI_REPLACEMENT_CHAR;
        }
        } else {
        *target++ = ch;
        }
    } else { /**//* i.e., ch > UNI_MAX_LEGAL_UTF32 */
        result = sourceIllegal;
        *target++ = UNI_REPLACEMENT_CHAR;
    }
    }
    *sourceStart = source;
    *targetStart = target;
    return result;
}

/**//* ---------------------------------------------------------------------

    Note A.
    The fall-through switches in UTF-8 reading code save a
    temp variable, some decrements & conditionals.  The switches
    are equivalent to the following loop:
    {
        int tmpBytesToRead = extraBytesToRead+1;
        do {
        ch += *source++;
        --tmpBytesToRead;
        if (tmpBytesToRead) ch <<= 6;
        } while (tmpBytesToRead > 0);
    }
    In UTF-8 writing code, the switches on "bytesToWrite" are
    similarly unrolled loops.

   --------------------------------------------------------------------- */

 

涓?C++ 鐨勫瓧絎︿覆涓嶤#鐨勮漿鍖?/p>

1錛夊皢system::String 杞寲涓篊++鐨剆tring錛?br>// convert_system_string.cpp
// compile with: /clr
#include <string>
#include <iostream>
using namespace std;
using namespace System;

void MarshalString ( String ^ s, string& os ) {
   using namespace Runtime::InteropServices;
   const char* chars =
      (const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();
   os = chars;
   Marshal::FreeHGlobal(IntPtr((void*)chars));
}

void MarshalString ( String ^ s, wstring& os ) {
   using namespace Runtime::InteropServices;
   const wchar_t* chars =
      (const wchar_t*)(Marshal::StringToHGlobalUni(s)).ToPointer();
   os = chars;
   Marshal::FreeHGlobal(IntPtr((void*)chars));
}

int main() {
   string a = "test";
   wstring b = L"test2";
   String ^ c = gcnew String("abcd");

   cout << a << endl;
   MarshalString(c, a);
   c = "efgh";
   MarshalString(c, b);
   cout << a << endl;
   wcout << b << endl;
}


2錛夊皢System::String杞寲涓篶har*鎴杦_char*
// convert_string_to_wchar.cpp
// compile with: /clr
#include < stdio.h >
#include < stdlib.h >
#include < vcclr.h >

using namespace System;

int main() {
   String ^str = "Hello";

   // Pin memory so GC can't move it while native function is called
   pin_ptr<const wchar_t> wch = PtrToStringChars(str);
   printf_s("%S\n", wch);

   // Conversion to char* :
   // Can just convert wchar_t* to char* using one of the
   // conversion functions such as:
   // WideCharToMultiByte()
   // wcstombs_s()
   //  etc
   size_t convertedChars = 0;
   size_t  sizeInBytes = ((str->Length + 1) * 2);
   errno_t err = 0;
   char    *ch = (char *)malloc(sizeInBytes);

   err = wcstombs_s(&convertedChars,
                    ch, sizeInBytes,
                    wch, sizeInBytes);
   if (err != 0)
      printf_s("wcstombs_s  failed!\n");

    printf_s("%s\n", ch);
}



true 2007-11-18 19:48 鍙戣〃璇勮
]]>
utf8緙栫爜綆浠?/title><link>http://m.shnenglu.com/true/archive/2007/04/05/21335.html</link><dc:creator>true</dc:creator><author>true</author><pubDate>Thu, 05 Apr 2007 09:23:00 GMT</pubDate><guid>http://m.shnenglu.com/true/archive/2007/04/05/21335.html</guid><wfw:comment>http://m.shnenglu.com/true/comments/21335.html</wfw:comment><comments>http://m.shnenglu.com/true/archive/2007/04/05/21335.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/true/comments/commentRss/21335.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/true/services/trackbacks/21335.html</trackback:ping><description><![CDATA[<p align=center><font size=5>utf8鐨勭紪鐮佺畻娉?/font><br>浣滆咃細杞澆    杞創鑷細杞澆    鐐瑰嚮鏁幫細827    鏂囩珷褰曞叆錛?zhaizl </p> <p> <blockquote></blockquote><br><br> <p dir=ltr style="MARGIN-RIGHT: 0px"><br>          <br>渚嬪瀛楃"姹?鐨剈nicode鏄?C49錛屾妸榪欎釜unicode瀛楃琛ㄧず涓轟竴涓ぇ鏁存暟錛岀劧鍚庤漿鍙樻垚澶氬瓧鑺傜紪鐮?10110001001001錛?br>          <br>瑙傚療榪欎釜鏁存暟鐨勪簩榪涘埗鐮佸簭鍒楋紙110錛?10001錛?01001錛?br>          浠庡悗寰鍓嶅彇<br>          <br>濡傛灉榪欎釜浜岃繘鍒跺簭鍒楀彧鏈夊悗7浣嶏紙灝忎簬128,涔熷氨鏄痑scii瀛楃錛夊垯鐩存帴鍙栧悗7浣嶄簩榪涘埗鏁板艦鎴愪竴涓猽tf8瀛楃銆?br>          <br>涓婇潰鐨勫瓧絎?#8220;姹?#8221;浜岃繘鍒跺簭鍒楀ぇ浜?浣嶏紝鎵浠ュ彇鍚?浣?1001001)錛屽姞10褰㈡垚涓涓猽tf8瀛楄妭錛?0 001001 ,16榪涘埗89錛夈?br>          <br>鍓╀笅鐨勪簩榪涘埗搴忓垪錛?10錛?10001錛変粠鍚庡悜鍓嶅彇6浣嶏紝鍔?0褰㈡垚涓涓猽tf8瀛楄妭錛?0 110001錛?6榪涘埗B1錛夈?br>          <br>鍓╀笅鐨勪簩榪涘埗搴忓垪錛?10錛変粠鍚庡悜鍓嶅彇6浣嶏紝鐢變簬涓嶈凍6浣嶏紝灝嗚繖涓暟鍜?110000鐩告垨錛屽緱鍒板瓧絎?1100110錛?6榪涘埗E6<br>          <br>鏈鍚庯紝灝卞緱鍒頒簡utf8緙栫爜錛?6榪涘埗琛ㄧず涓篍6B189</p> <br> <div id="hvzpftn" class=tit twffan="done">瑙hUTF8緙栫爜</div> <div id="hvzpftn" class=date twffan="done">2007-01-19 10:40</div> <table style="TABLE-LAYOUT: fixed"> <tbody> <tr> <td> <div id="hvzpftn" class=cnt twffan="done"> <p>鍦ㄧ綉緇滀腑鏈夊緢澶氬湴鏂歸兘鏈夐噰鐢║TF8緙栫爜錛岀敱浜庤緙栧啓涓庨偖浠舵湇鍔$鏈夊叧鐨勭▼搴忥紝鑰岄偖浠舵湇鍔$鏈変簺鍦版柟鐢ㄥ埌浜哢TF8緙栫爜錛屾墍浠ュ瀹冩湁浜嗗垵姝ョ殑璁よ瘑錛?br><br>瀹冨叾瀹炲拰Unicode鏄悓綾伙紝灝辨槸鍦ㄧ紪鐮佹柟寮忎笂涓嶅悓錛?br>棣栧厛UTF8緙栫爜鍚庣殑澶у皬鏄笉涓瀹氾紝涓嶅儚Unicode緙栫爜鍚庣殑澶у皬鏄竴鏍風殑錛?nbsp;<br>鎴戜滑鍏堟潵鐪婾nicode鐨勭紪鐮侊細涓涓嫳鏂囧瓧姣?nbsp;“a” 鍜屻涓涓眽瀛?nbsp;“濂?#8221;錛岀紪鐮佸悗閮芥槸鍗犵敤鐨勭┖闂村ぇ灝忔槸涓鏍風殑錛岄兘鏄袱涓瓧鑺傦紒<br><br>鑰孶TF8緙栫爜錛氫竴涓嫳鏂囧瓧姣?#8220;a” 鍜屻涓涓眽瀛?nbsp;“濂?#8221;錛岀紪鐮佸悗鍗犵敤鐨勭┖闂村ぇ灝忓氨涓嶆牱浜嗭紝鍓嶈呮槸涓涓瓧鑺傦紝鍚庤呮槸涓変釜瀛楄妭錛?br><br>鐜板湪灝辮鎴戜滑鏉ョ湅鐪婾TF8緙栫爜鐨勫師鐞嗗惂錛?br>銆銆鍥犱負涓涓瓧姣嶈繕鏈変竴浜涢敭鐩樹笂鐨勭鍙峰姞璧鋒潵鍙敤浜岃繘鍒朵竷浣嶅氨鍙互琛ㄧず鍑烘潵錛岃屼竴涓瓧鑺傚氨鏄叓浣嶏紝鎵浠TF8灝辯敤涓涓瓧鑺傛潵琛ㄥ紡瀛楁瘝鍜屼竴浜涢敭鐩樹笂鐨勭鍙楓傜劧鑰屽綋鎴戜滑鎷垮埌琚紪鐮佸悗鐨勪竴涓瓧鑺傚悗鎬庝箞鐭ラ亾瀹冪殑緇勬垚錛熷畠鏈夊彲鑳芥槸鑻辨枃瀛楁瘝鐨勪竴涓瓧鑺傦紝涔熸湁鍙兘鏄眽瀛楃殑涓変釜瀛楄妭涓殑涓涓瓧鑺傦紒鎵浠ワ紝UTF8鏄湁鏍囧織浣嶇殑錛?br><br>銆銆褰撹琛ㄧず鐨勫唴瀹規槸銆7浣嶃鐨勬椂鍊欏氨鐢ㄤ竴涓瓧鑺傦細0******* 銆絎竴涓?涓烘爣蹇椾綅錛屽墿涓嬬殑絀洪棿姝eソ鍙互琛ㄧずASCII銆0錛?27銆鐨勫唴瀹廣?br><br>銆銆褰撹琛ㄧず鐨勫唴瀹瑰湪銆8銆鍒般11銆浣嶇殑鏃跺欏氨鐢ㄤ袱涓瓧鑺傦細110***** 10****** 銆絎竴涓瓧鑺傜殑110鍜岀浜屼釜瀛楄妭鐨?0涓烘爣蹇椾綅銆?br><br>銆銆褰撹琛ㄧず鐨勫唴瀹瑰湪銆12銆鍒般16銆浣嶇殑鏃跺欏氨鐢ㄤ笁涓瓧鑺傦細1110***** 10****** 10****** 銆銆銆鍜屼笂闈竴鏍鳳紝絎竴涓瓧鑺傜殑1110鍜岀浜屻佷笁涓瓧鑺傜殑10閮芥槸鏍囧織浣嶏紝鍓╀笅鐨勭┖闂存濂藉彲浠ヨ〃紺烘眽瀛椼?br><br>銆銆浠ユ綾繪帹錛?br>鍥涗釜瀛楄妭錛?1110**** 10****** 10****** 10****** <br>銆銆浜斾釜瀛楄妭錛?11110*** 10****** 10****** 10****** 10****** <br>銆銆鍏釜瀛楄妭錛?111110** 10****** 10****** 10****** 10****** 10****** <br>銆銆.............................................<br> ..............................................<br><br>鏄庣櫧浜嗘病鏈夛紵<br>緙栫爜鐨勬柟娉曟槸浠庝綆浣嶅埌楂樹綅<br><br>鐜板湪灝辮鎴戜滑鏉ョ湅鐪嬪疄渚嬪惂錛?br><br>綰㈣壊涓烘爣蹇椾綅<br>鍏跺畠鐫鑹蹭負浜嗘樉紺哄叾錛岀紪鐮佸悗鐨勪綅緗?nbsp;<br></p> <p> <table height=138 cellSpacing=0 cellPadding=0 width=765 border=1> <tbody> <tr> <td> <p align=center>Unicode鍗佸叚榪涘埗</p> </td> <td><br> <p align=center>Unicode浜岃繘鍒?/p> </td> <td><br> <p align=center>UTF8浜岃繘鍒?/p> </td> <td><br> <p align=center>UTF8鍗佸叚榪涘埗</p> </td> <td><br> <p align=center>UTF8瀛楄妭鏁?/p> </td> </tr> <tr> <td><br> <p align=center>B</p> </td> <td><br> <p align=center><font style="BACKGROUND-COLOR: #ffc0cb">00001011</font></p> </td> <td><br> <p align=center><font style="BACKGROUND-COLOR: #ffff00">0</font><font style="BACKGROUND-COLOR: #ffc0cb">0001010</font></p> </td> <td><br> <p align=center>B</p> </td> <td><br> <p align=center>1</p> </td> </tr> <tr> <td><br> <p align=center>9D</p> </td> <td><br> <p align=center><font style="BACKGROUND-COLOR: #ffc0cb">00010</font><font style="BACKGROUND-COLOR: #808080">011101</font></p> </td> <td><br> <p align=center><font style="BACKGROUND-COLOR: #ffff00">110</font><font style="BACKGROUND-COLOR: #ffc0cb">00010</font> <font style="BACKGROUND-COLOR: #ffff00">10</font><font style="BACKGROUND-COLOR: #808080">011101 </font></p> </td> <td><br> <p align=center>C2 9D</p> </td> <td><br> <p align=center>2</p> </td> </tr> <tr> <td><br> <p align=center>A89E</p> </td> <td><br> <p align=center><font style="BACKGROUND-COLOR: #ffc0cb">1010</font><font style="BACKGROUND-COLOR: #808080">1000 </font><font style="BACKGROUND-COLOR: #808080">10</font><font style="BACKGROUND-COLOR: #7fffd4">011110</font></p> </td> <td><br> <p align=center><font style="BACKGROUND-COLOR: #ffff00">1110</font><font style="BACKGROUND-COLOR: #ffc0cb">1010</font> <font style="BACKGROUND-COLOR: #ffff00">10</font><font style="BACKGROUND-COLOR: #808080">100010</font> <font style="BACKGROUND-COLOR: #ffff00">10</font><font style="BACKGROUND-COLOR: #7fffd4">011110</font></p> </td> <td><br> <p align=center>EA A2 9E</p> </td> <td><br> <p align=center>3</p> </td> </tr> </tbody> </table> </p> </div> </td> </tr> </tbody> </table> <img src ="http://m.shnenglu.com/true/aggbug/21335.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/true/" target="_blank">true</a> 2007-04-05 17:23 <a href="http://m.shnenglu.com/true/archive/2007/04/05/21335.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>瀛楃錛岀紪鐮佺殑鍩烘湰鐭ヨ瘑http://m.shnenglu.com/true/archive/2007/04/05/21334.htmltruetrueThu, 05 Apr 2007 09:14:00 GMThttp://m.shnenglu.com/true/archive/2007/04/05/21334.htmlhttp://m.shnenglu.com/true/comments/21334.htmlhttp://m.shnenglu.com/true/archive/2007/04/05/21334.html#Feedback0http://m.shnenglu.com/true/comments/commentRss/21334.htmlhttp://m.shnenglu.com/true/services/trackbacks/21334.html瀛楃錛屽瓧鑺傚拰緙栫爜

[鍘熷垱鏂囩珷錛岃漿杞借淇濈暀鎴栨敞鏄庡嚭澶勶細http://www.regexlab.com/zh/encoding.htm]

綰у埆錛氫腑綰?/p>

鎽樿錛氭湰鏂囦粙緇嶄簡瀛楃涓庣紪鐮佺殑鍙戝睍榪囩▼錛岀浉鍏蟲蹇電殑姝g‘鐞嗚В銆備婦渚嬭鏄庝簡涓浜涘疄闄呭簲鐢ㄤ腑錛岀紪鐮佺殑瀹炵幇鏂規硶銆傜劧鍚庯紝鏈枃璁茶堪浜嗛氬父瀵瑰瓧絎︿笌緙栫爜鐨勫嚑縐嶈瑙o紝鐢變簬榪欎簺璇В鑰屽鑷翠貢鐮佷駭鐢熺殑鍘熷洜錛屼互鍙婃秷闄や貢鐮佺殑鍔炴硶銆傛湰鏂囩殑鍐呭娑電洊浜?#8220;涓枃闂”錛?#8220;涔辯爜闂”銆?/p>

鎺屾彙緙栫爜闂鐨勫叧閿槸姝g‘鍦扮悊瑙g浉鍏蟲蹇碉紝緙栫爜鎵娑夊強鐨勬妧鏈叾瀹炴槸寰堢畝鍗曠殑銆傚洜姝わ紝闃呰鏈枃鏃墮渶瑕佹參璇誨鎯籌紝澶氭濊冦?/p>

寮曡█

“瀛楃涓庣紪鐮?#8221;鏄竴涓緇忓父璁ㄨ鐨勮瘽棰樸傚嵆浣胯繖鏍鳳紝鏃跺父鍑虹幇鐨勪貢鐮佷粛鐒跺洶鎵扮潃澶у銆傝櫧鐒舵垜浠湁寰堝鐨勫姙娉曞彲浠ョ敤鏉ユ秷闄や貢鐮侊紝浣嗘垜浠茍涓嶄竴瀹氱悊瑙h繖浜涘姙娉曠殑鍐呭湪鍘熺悊銆傝屾湁鐨勪貢鐮佷駭鐢熺殑鍘熷洜錛屽疄闄呬笂鐢變簬搴曞眰浠g爜鏈韓鏈夐棶棰樻墍瀵艱嚧鐨勩傚洜姝わ紝涓嶄粎鏄垵瀛﹁呬細瀵瑰瓧絎︾紪鐮佹劅鍒版ā緋婏紝鏈夌殑搴曞眰寮鍙戜漢鍛樺悓鏍峰瀛楃緙栫爜緙轟箯鍑嗙‘鐨勭悊瑙c?/p>

鍥為〉棣?/font>

1. 緙栫爜闂鐨勭敱鏉ワ紝鐩稿叧姒傚康鐨勭悊瑙?/h4>

1.1 瀛楃涓庣紪鐮佺殑鍙戝睍

浠庤綆楁満瀵瑰鍥借璦鐨勬敮鎸佽搴︾湅錛屽ぇ鑷村彲浠ュ垎涓轟笁涓樁孌碉細

緋葷粺鍐呯爜 璇存槑 緋葷粺
闃舵涓 ASCII 璁$畻鏈哄垰寮濮嬪彧鏀寔鑻辮錛屽叾瀹冭璦涓嶈兘澶熷湪璁$畻鏈轟笂瀛樺偍鍜屾樉紺恒?/td> 鑻辨枃 DOS
闃舵浜?/td> ANSI緙栫爜
錛堟湰鍦板寲錛?/td>
涓轟嬌璁$畻鏈烘敮鎸佹洿澶氳璦錛岄氬父浣跨敤 0x80~0xFF 鑼冨洿鐨?2 涓瓧鑺傛潵琛ㄧず 1 涓瓧絎︺傛瘮濡傦細姹夊瓧 '涓? 鍦ㄤ腑鏂囨搷浣滅郴緇熶腑錛屼嬌鐢?[0xD6,0xD0] 榪欎袱涓瓧鑺傚瓨鍌ㄣ?br>
涓嶅悓鐨勫浗瀹跺拰鍦板尯鍒跺畾浜嗕笉鍚岀殑鏍囧噯錛岀敱姝や駭鐢熶簡 GB2312, BIG5, JIS 絳夊悇鑷殑緙栫爜鏍囧噯銆傝繖浜涗嬌鐢?2 涓瓧鑺傛潵浠h〃涓涓瓧絎︾殑鍚勭姹夊瓧寤朵幾緙栫爜鏂瑰紡錛岀О涓?strong> ANSI 緙栫爜銆傚湪綆浣撲腑鏂囩郴緇熶笅錛孉NSI 緙栫爜浠h〃 GB2312 緙栫爜錛屽湪鏃ユ枃鎿嶄綔緋葷粺涓嬶紝ANSI 緙栫爜浠h〃 JIS 緙栫爜銆?br>
涓嶅悓 ANSI 緙栫爜涔嬮棿浜掍笉鍏煎錛屽綋淇℃伅鍦ㄥ浗闄呴棿浜ゆ祦鏃訛紝鏃犳硶灝嗗睘浜庝袱縐嶈璦鐨勬枃瀛楋紝瀛樺偍鍦ㄥ悓涓孌?strong> ANSI 緙栫爜鐨勬枃鏈腑銆?/td>
涓枃 DOS錛屼腑鏂?Windows 95/98錛屾棩鏂?Windows 95/98
闃舵涓?/td> UNICODE
錛堝浗闄呭寲錛?/td>
涓轟簡浣垮浗闄呴棿淇℃伅浜ゆ祦鏇村姞鏂逛究錛屽浗闄呯粍緇囧埗瀹氫簡 UNICODE 瀛楃闆?/strong>錛屼負鍚勭璇█涓殑姣忎竴涓瓧絎﹁瀹氫簡緇熶竴騫朵笖鍞竴鐨勬暟瀛楃紪鍙鳳紝浠ユ弧瓚寵法璇█銆佽法騫沖彴榪涜鏂囨湰杞崲銆佸鐞嗙殑瑕佹眰銆?/td> Windows NT/2000/XP錛孡inux錛孞ava

瀛楃涓插湪鍐呭瓨涓殑瀛樻斁鏂規硶錛?/p>

鍦?ASCII 闃舵錛?strong>鍗曞瓧鑺傚瓧絎︿覆浣跨敤涓涓瓧鑺傚瓨鏀句竴涓瓧絎︼紙SBCS錛夈傛瘮濡傦紝"Bob123" 鍦ㄥ唴瀛樹腑涓猴細

42 6F 62 31 32 33 00
B o b 1 2 3 \0

鍦ㄤ嬌鐢?ANSI 緙栫爜鏀寔澶氱璇█闃舵錛屾瘡涓瓧絎︿嬌鐢ㄤ竴涓瓧鑺傛垨澶氫釜瀛楄妭鏉ヨ〃紺猴紙MBCS錛夛紝鍥犳錛岃繖縐嶆柟寮忓瓨鏀劇殑瀛楃涔熻縐頒綔澶氬瓧鑺傚瓧絎?/strong>銆傛瘮濡傦紝"涓枃123" 鍦ㄤ腑鏂?Windows 95 鍐呭瓨涓負7涓瓧鑺傦紝姣忎釜姹夊瓧鍗?涓瓧鑺傦紝姣忎釜鑻辨枃鍜屾暟瀛楀瓧絎﹀崰1涓瓧鑺傦細

D6 D0 CE C4 31 32 33 00
涓?/td> 鏂?/td> 1 2 3 \0

鍦?UNICODE 琚噰鐢ㄤ箣鍚庯紝璁$畻鏈哄瓨鏀懼瓧絎︿覆鏃訛紝鏀逛負瀛樻斁姣忎釜瀛楃鍦?UNICODE 瀛楃闆嗕腑鐨勫簭鍙楓傜洰鍓嶈綆楁満涓鑸嬌鐢?2 涓瓧鑺傦紙16 浣嶏級鏉ュ瓨鏀句竴涓簭鍙鳳紙DBCS錛夛紝鍥犳錛岃繖縐嶆柟寮忓瓨鏀劇殑瀛楃涔熻縐頒綔瀹藉瓧鑺傚瓧絎?/strong>銆傛瘮濡傦紝瀛楃涓?"涓枃123" 鍦?Windows 2000 涓嬶紝鍐呭瓨涓疄闄呭瓨鏀劇殑鏄?5 涓簭鍙鳳細

2D 4E 87 65 31 00 32 00 33 00 00 00      ← 鍦?x86 CPU 涓紝浣庡瓧鑺傚湪鍓?/font>
涓?/td> 鏂?/td> 1 2 3 \0

涓鍏卞崰 10 涓瓧鑺傘?/p>

鍥為〉棣?/font>

1.2 瀛楃錛屽瓧鑺傦紝瀛楃涓?/h5>

鐞嗚В緙栫爜鐨勫叧閿紝鏄鎶婂瓧絎︾殑姒傚康鍜屽瓧鑺傜殑姒傚康鐞嗚В鍑嗙‘銆傝繖涓や釜姒傚康瀹規槗娣鋒穯錛屾垜浠湪姝ゅ仛涓涓嬪尯鍒嗭細

姒傚康鎻忚堪 涓句緥
瀛楃 浜轟滑浣跨敤鐨勮鍙鳳紝鎶借薄鎰忎箟涓婄殑涓涓鍙楓?/td> '1', '涓?, 'a', '$', '錕?, ……
瀛楄妭 璁$畻鏈轟腑瀛樺偍鏁版嵁鐨勫崟鍏冿紝涓涓?浣嶇殑浜岃繘鍒舵暟錛屾槸涓涓緢鍏蜂綋鐨勫瓨鍌ㄧ┖闂淬?/td> 0x01, 0x45, 0xFA, ……
ANSI
瀛楃涓?/td>
鍦ㄥ唴瀛樹腑錛屽鏋?#8220;瀛楃”鏄互 ANSI 緙栫爜褰㈠紡瀛樺湪鐨勶紝涓涓瓧絎﹀彲鑳戒嬌鐢ㄤ竴涓瓧鑺傛垨澶氫釜瀛楄妭鏉ヨ〃紺猴紝閭d箞鎴戜滑縐拌繖縐嶅瓧絎︿覆涓?ANSI 瀛楃涓?/strong>鎴栬?strong>澶氬瓧鑺傚瓧絎︿覆銆?/td> "涓枃123"
錛堝崰7瀛楄妭錛?/font>
UNICODE
瀛楃涓?/td>
鍦ㄥ唴瀛樹腑錛屽鏋?#8220;瀛楃”鏄互鍦?UNICODE 涓殑搴忓彿瀛樺湪鐨勶紝閭d箞鎴戜滑縐拌繖縐嶅瓧絎︿覆涓?UNICODE 瀛楃涓?/strong>鎴栬?strong>瀹藉瓧鑺傚瓧絎︿覆銆?/td> L"涓枃123"
錛堝崰10瀛楄妭錛?/font>

鐢變簬涓嶅悓 ANSI 緙栫爜鎵瑙勫畾鐨勬爣鍑嗘槸涓嶇浉鍚岀殑錛屽洜姝わ紝瀵逛簬涓涓粰瀹氱殑澶氬瓧鑺傚瓧絎︿覆錛屾垜浠繀欏葷煡閬撳畠閲囩敤鐨勬槸鍝竴縐嶇紪鐮佽鍒欙紝鎵嶈兘澶熺煡閬撳畠鍖呭惈浜嗗摢浜?#8220;瀛楃”銆傝屽浜?UNICODE 瀛楃涓?/strong>鏉ヨ錛屼笉綆″湪浠涔堢幆澧冧笅錛屽畠鎵浠h〃鐨?#8220;瀛楃”鍐呭鎬繪槸涓嶅彉鐨勩?/p>

鍥為〉棣?/font>

1.3 瀛楃闆嗕笌緙栫爜

鍚勪釜鍥藉鍜屽湴鍖烘墍鍒跺畾鐨勪笉鍚?ANSI 緙栫爜鏍囧噯涓紝閮藉彧瑙勫畾浜嗗悇鑷璦鎵闇鐨?#8220;瀛楃”銆傛瘮濡傦細姹夊瓧鏍囧噯錛圙B2312錛変腑娌℃湁瑙勫畾闊╁浗璇瓧絎︽庢牱瀛樺偍銆傝繖浜?ANSI 緙栫爜鏍囧噯鎵瑙勫畾鐨勫唴瀹瑰寘鍚袱灞傚惈涔夛細

  1. 浣跨敤鍝簺瀛楃銆備篃灝辨槸璇村摢浜涙眽瀛楋紝瀛楁瘝鍜岀鍙蜂細琚敹鍏ユ爣鍑嗕腑銆傛墍鍖呭惈“瀛楃”鐨勯泦鍚堝氨鍙仛“瀛楃闆?/strong>”銆?
  2. 瑙勫畾姣忎釜“瀛楃”鍒嗗埆鐢ㄤ竴涓瓧鑺傝繕鏄涓瓧鑺傚瓨鍌紝鐢ㄥ摢浜涘瓧鑺傛潵瀛樺偍錛岃繖涓瀹氬氨鍙仛“緙栫爜”銆?

鍚勪釜鍥藉鍜屽湴鍖哄湪鍒跺畾緙栫爜鏍囧噯鐨勬椂鍊欙紝“瀛楃鐨勯泦鍚?#8221;鍜?#8220;緙栫爜”涓鑸兘鏄悓鏃跺埗瀹氱殑銆傚洜姝わ紝騫沖父鎴戜滑鎵璇寸殑“瀛楃闆?#8221;錛屾瘮濡傦細GB2312, GBK, JIS 絳夛紝闄や簡鏈?#8220;瀛楃鐨勯泦鍚?#8221;榪欏眰鍚箟澶栵紝鍚屾椂涔熷寘鍚簡“緙栫爜”鐨勫惈涔夈?/p>

UNICODE 瀛楃闆?/strong>”鍖呭惈浜嗗悇縐嶈璦涓嬌鐢ㄥ埌鐨勬墍鏈?#8220;瀛楃”銆傜敤鏉ョ粰 UNICODE 瀛楃闆嗙紪鐮佺殑鏍囧噯鏈夊緢澶氱錛屾瘮濡傦細UTF-8, UTF-7, UTF-16, UnicodeLittle, UnicodeBig 絳夈?/p>

鍥為〉棣?/font>

1.4 甯哥敤鐨勭紪鐮佺畝浠?/h5>

綆鍗曚粙緇嶄竴涓嬪父鐢ㄧ殑緙栫爜瑙勫垯錛屼負鍚庤竟鐨勭珷鑺傚仛涓涓噯澶囥傚湪榪欓噷錛屾垜浠牴鎹紪鐮佽鍒欑殑鐗圭偣錛屾妸鎵鏈夌殑緙栫爜鍒嗘垚涓夌被錛?/p>
鍒嗙被 緙栫爜鏍囧噯 璇存槑
鍗曞瓧鑺傚瓧絎︾紪鐮?/td> ISO-8859-1 鏈綆鍗曠殑緙栫爜瑙勫垯錛屾瘡涓涓瓧鑺傜洿鎺ヤ綔涓轟竴涓?UNICODE 瀛楃銆傛瘮濡傦紝[0xD6, 0xD0] 榪欎袱涓瓧鑺傦紝閫氳繃 iso-8859-1 杞寲涓哄瓧絎︿覆鏃訛紝灝嗙洿鎺ュ緱鍒?[0x00D6, 0x00D0] 涓や釜 UNICODE 瀛楃錛屽嵆 "ÖÐ"銆?br>
鍙嶄箣錛屽皢 UNICODE 瀛楃涓查氳繃 iso-8859-1 杞寲涓哄瓧鑺備覆鏃訛紝鍙兘姝e父杞寲 0~255 鑼冨洿鐨勫瓧絎︺?/td>
ANSI 緙栫爜 GB2312,
BIG5,
Shift_JIS,
ISO-8859-2 ……
鎶?UNICODE 瀛楃涓查氳繃 ANSI 緙栫爜杞寲涓?#8220;瀛楄妭涓?#8221;鏃訛紝鏍規嵁鍚勮嚜緙栫爜鐨勮瀹氾紝涓涓?UNICODE 瀛楃鍙兘杞寲鎴愪竴涓瓧鑺傛垨澶氫釜瀛楄妭銆?br>
鍙嶄箣錛屽皢瀛楄妭涓茶漿鍖栨垚瀛楃涓叉椂錛屼篃鍙兘澶氫釜瀛楄妭杞寲鎴愪竴涓瓧絎︺傛瘮濡傦紝[0xD6, 0xD0] 榪欎袱涓瓧鑺傦紝閫氳繃 GB2312 杞寲涓哄瓧絎︿覆鏃訛紝灝嗗緱鍒?[0x4E2D] 涓涓瓧絎︼紝鍗?'涓? 瀛椼?br>
“ANSI 緙栫爜”鐨勭壒鐐癸細
1. 榪欎簺“ANSI 緙栫爜鏍囧噯”閮藉彧鑳藉鐞嗗悇鑷璦鑼冨洿涔嬪唴鐨?UNICODE 瀛楃銆?br>2. “UNICODE 瀛楃”涓?#8220;杞崲鍑烘潵鐨勫瓧鑺?#8221;涔嬮棿鐨勫叧緋繪槸浜轟負瑙勫畾鐨勩?/td>
UNICODE 緙栫爜 UTF-8,
UTF-16, UnicodeBig ……
涓?#8220;ANSI 緙栫爜”綾諱技鐨勶紝鎶婂瓧絎︿覆閫氳繃 UNICODE 緙栫爜杞寲鎴?#8220;瀛楄妭涓?#8221;鏃訛紝涓涓?UNICODE 瀛楃鍙兘杞寲鎴愪竴涓瓧鑺傛垨澶氫釜瀛楄妭銆?br>
涓?#8220;ANSI 緙栫爜”涓嶅悓鐨勬槸錛?br>1. 榪欎簺“UNICODE 緙栫爜”鑳藉澶勭悊鎵鏈夌殑 UNICODE 瀛楃銆?br>2. “UNICODE 瀛楃”涓?#8220;杞崲鍑烘潵鐨勫瓧鑺?#8221;涔嬮棿鏄彲浠ラ氳繃璁$畻寰楀埌鐨勩?/td>

鎴戜滑瀹為檯涓婃病鏈夊繀瑕佸幓娣辯┒姣忎竴縐嶇紪鐮佸叿浣撴妸鏌愪竴涓瓧絎︾紪鐮佹垚浜嗗摢鍑犱釜瀛楄妭錛屾垜浠彧闇瑕佺煡閬?#8220;緙栫爜”鐨勬蹇靛氨鏄妸“瀛楃”杞寲鎴?#8220;瀛楄妭”灝卞彲浠ヤ簡銆傚浜?#8220;UNICODE 緙栫爜”錛岀敱浜庡畠浠槸鍙互閫氳繃璁$畻寰楀埌鐨勶紝鍥犳錛屽湪鐗規畩鐨勫満鍚堬紝鎴戜滑鍙互鍘諱簡瑙f煇涓縐?#8220;UNICODE 緙栫爜”鏄庢牱鐨勮鍒欍?/p>

鍥為〉棣?/font>

2. 瀛楃涓庣紪鐮佸湪紼嬪簭涓殑瀹炵幇

2.1 紼嬪簭涓殑瀛楃涓庡瓧鑺?/h5>

鍦?C++ 鍜?Java 涓紝鐢ㄦ潵浠h〃“瀛楃”鍜?#8220;瀛楄妭”鐨勬暟鎹被鍨嬶紝浠ュ強榪涜緙栫爜鐨勬柟娉曪細

綾誨瀷鎴栨搷浣?/strong> C++ Java
瀛楃 wchar_t char
瀛楄妭 char byte
ANSI 瀛楃涓?/td> char[] byte[]
UNICODE 瀛楃涓?/td> wchar_t[] String
瀛楄妭涓?#8594;瀛楃涓?/td> mbstowcs(), MultiByteToWideChar() string = new String(bytes, "encoding")
瀛楃涓?#8594;瀛楄妭涓?/td> wcstombs(), WideCharToMultiByte() bytes = string.getBytes("encoding")

浠ヤ笂闇瑕佹敞鎰忓嚑鐐癸細

  1. Java 涓殑 char 浠h〃涓涓?#8220;UNICODE 瀛楃錛堝瀛楄妭瀛楃錛?#8221;錛岃?C++ 涓殑 char 浠h〃涓涓瓧鑺傘?
  2. MultiByteToWideChar() 鍜?WideCharToMultiByte() 鏄?Windows API 鍑芥暟銆?

鍥為〉棣?/font>

2.2 C++ 涓浉鍏沖疄鐜版柟娉?/h5>

澹版槑涓孌靛瓧絎︿覆甯擱噺錛?/p>
// ANSI 瀛楃涓詫紝鍐呭闀垮害 7 瀛楄妭
char
     sz[20] = "涓枃123";

// UNICODE 瀛楃涓詫紝鍐呭闀垮害 5 涓?wchar_t錛?0 瀛楄妭錛?/span>
wchar_t wsz[20] = L"\x4E2D\x6587\x0031\x0032\x0033";

UNICODE 瀛楃涓茬殑 I/O 鎿嶄綔錛屽瓧絎︿笌瀛楄妭鐨勮漿鎹㈡搷浣滐細

// 榪愯鏃惰瀹氬綋鍓?ANSI 緙栫爜錛孷C 鏍煎紡
setlocale(LC_ALL, ".936");

// GCC 涓牸寮?/span>
setlocale(LC_ALL, "zh_CN.GBK");

// Visual C++ 涓嬌鐢ㄥ皬鍐?%s錛屾寜鐓?setlocale 鎸囧畾緙栫爜杈撳嚭鍒版枃浠?br>// GCC 涓嬌鐢ㄥぇ鍐?%S
fwprintf(fp, L"%s\n", wsz);

// 鎶?UNICODE 瀛楃涓叉寜鐓?setlocale 鎸囧畾鐨勭紪鐮佽漿鎹㈡垚瀛楄妭
wcstombs(sz, wsz, 20);
// 鎶婂瓧鑺備覆鎸夌収 setlocale 鎸囧畾鐨勭紪鐮佽漿鎹㈡垚 UNICODE 瀛楃涓?br>
mbstowcs(wsz, sz, 20);

鍦?Visual C++ 涓紝UNICODE 瀛楃涓插父閲忔湁鏇寸畝鍗曠殑琛ㄧず鏂規硶銆傚鏋滄簮紼嬪簭鐨勭紪鐮佷笌褰撳墠榛樿 ANSI 緙栫爜涓嶇錛屽垯闇瑕佷嬌鐢?#pragma setlocale錛屽憡璇夌紪璇戝櫒婧愮▼搴忎嬌鐢ㄧ殑緙栫爜錛?/p>
// 濡傛灉婧愮▼搴忕殑緙栫爜涓庡綋鍓嶉粯璁?ANSI 緙栫爜涓嶄竴鑷達紝
// 鍒欓渶瑕佹琛岋紝緙栬瘧鏃剁敤鏉ユ寚鏄庡綋鍓嶆簮紼嬪簭浣跨敤鐨勭紪鐮?/font>

#pragma setlocale
(".936")

// UNICODE 瀛楃涓插父閲忥紝鍐呭闀垮害 10 瀛楄妭
wchar_t wsz[20] = L"涓枃123";

浠ヤ笂闇瑕佹敞鎰?#pragma setlocale 涓?setlocale(LC_ALL, "") 鐨勪綔鐢ㄦ槸涓嶅悓鐨勶紝#pragma setlocale 鍦ㄧ紪璇戞椂璧蜂綔鐢紝setlocale() 鍦ㄨ繍琛屾椂璧蜂綔鐢ㄣ?/p>

鍥為〉棣?/font>

2.3 Java 涓浉鍏沖疄鐜版柟娉?/h5>

瀛楃涓茬被 String 涓殑鍐呭鏄?UNICODE 瀛楃涓詫細

// Java 浠g爜錛岀洿鎺ュ啓涓枃
String
string = "涓枃123";

// 寰楀埌闀垮害涓?5錛屽洜涓烘槸 5 涓瓧絎?/span>
System.out.println(string.length());

瀛楃涓?I/O 鎿嶄綔錛屽瓧絎︿笌瀛楄妭杞崲鎿嶄綔銆傚湪 Java 鍖?java.io.* 涓紝浠?#8220;Stream”緇撳熬鐨勭被涓鑸槸鐢ㄦ潵鎿嶄綔“瀛楄妭涓?#8221;鐨勭被錛屼互“Reader”錛?#8220;Writer”緇撳熬鐨勭被涓鑸槸鐢ㄦ潵鎿嶄綔“瀛楃涓?#8221;鐨勭被銆?/p>
// 瀛楃涓蹭笌瀛楄妭涓查棿鐩鎬簰杞寲

// 鎸夌収 GB2312 寰楀埌瀛楄妭錛堝緱鍒板瀛楄妭瀛楃涓詫級

byte
[] bytes = string.getBytes("GB2312");

// 浠庡瓧鑺傛寜鐓?GB2312 寰楀埌 UNICODE 瀛楃涓?/span>
string = new String(bytes, "GB2312");

// 瑕佸皢 String 鎸夌収鏌愮緙栫爜鍐欏叆鏂囨湰鏂囦歡錛屾湁涓ょ鏂規硶錛?br>
// 絎竴縐嶅姙娉曪細鐢?Stream 綾誨啓鍏ュ凡緇忔寜鐓ф寚瀹氱紪鐮佽漿鍖栧ソ鐨勫瓧鑺備覆

OutputStream os = new FileOutputStream("1.txt");
os.write(bytes);
os.close();

// 絎簩縐嶅姙娉曪細鏋勯犳寚瀹氱紪鐮佺殑 Writer 鏉ュ啓鍏ュ瓧絎︿覆
Writer ow = new OutputStreamWriter(new FileOutputStream("2.txt"), "GB2312");
ow.write(string);
ow.close();

/* 鏈鍚庡緱鍒扮殑 1.txt 鍜?2.txt 閮芥槸 7 涓瓧鑺?*/

濡傛灉 java 鐨勬簮紼嬪簭緙栫爜涓庡綋鍓嶉粯璁?ANSI 緙栫爜涓嶇錛屽垯鍦ㄧ紪璇戠殑鏃跺欙紝闇瑕佹寚鏄庝竴涓嬫簮紼嬪簭鐨勭紪鐮併傛瘮濡傦細

E:\>javac -encoding BIG5 Hello.java

浠ヤ笂闇瑕佹敞鎰忓尯鍒嗘簮紼嬪簭鐨勭紪鐮佷笌 I/O 鎿嶄綔鐨勭紪鐮侊紝鍓嶈呮槸鍦ㄧ紪璇戞椂璧蜂綔鐢紝鍚庤呮槸鍦ㄨ繍琛屾椂璧蜂綔鐢ㄣ?/p>

鍥為〉棣?/font>

3. 鍑犵璇В錛屼互鍙婁貢鐮佷駭鐢熺殑鍘熷洜鍜岃В鍐沖姙娉?/h4>

3.1 瀹規槗浜х敓鐨勮瑙?/h5>
瀵圭紪鐮佺殑璇В
璇В涓 鍦ㄥ皢“瀛楄妭涓?#8221;杞寲鎴?#8220;UNICODE 瀛楃涓?#8221;鏃訛紝姣斿鍦ㄨ鍙栨枃鏈枃浠舵椂錛屾垨鑰呴氳繃緗戠粶浼犺緭鏂囨湰鏃訛紝瀹規槗灝?#8220;瀛楄妭涓?#8221;綆鍗曞湴浣滀負鍗曞瓧鑺傚瓧絎︿覆錛岄噰鐢ㄦ瘡“涓涓瓧鑺?#8221;灝辨槸“涓涓瓧絎?#8221;鐨勬柟娉曡繘琛岃漿鍖栥?br>
鑰屽疄闄呬笂錛屽湪闈炶嫳鏂囩殑鐜涓紝搴旇灝?#8220;瀛楄妭涓?#8221;浣滀負 ANSI 瀛楃涓詫紝閲囩敤閫傚綋鐨勭紪鐮佹潵寰楀埌 UNICODE 瀛楃涓詫紝鏈夊彲鑳?#8220;澶氫釜瀛楄妭”鎵嶈兘寰楀埌“涓涓瓧絎?#8221;銆?br>
閫氬父錛屼竴鐩村湪鑻辨枃鐜涓嬪仛寮鍙戠殑紼嬪簭鍛樹滑錛屽鏄撴湁榪欑璇В銆?/td>
璇В浜?/td> 鍦?DOS錛學indows 98 絳夐潪 UNICODE 鐜涓嬶紝瀛楃涓查兘鏄互 ANSI 緙栫爜鐨勫瓧鑺傚艦寮忓瓨鍦ㄧ殑銆傝繖縐嶄互瀛楄妭褰㈠紡瀛樺湪鐨勫瓧絎︿覆錛屽繀欏葷煡閬撴槸鍝緙栫爜鎵嶈兘琚紜湴浣跨敤銆傝繖浣挎垜浠艦鎴愪簡涓涓儻鎬ф濈淮錛?#8220;瀛楃涓茬殑緙栫爜”銆?br>
褰?UNICODE 琚敮鎸佸悗錛孞ava 涓殑 String 鏄互瀛楃鐨?#8220;搴忓彿”鏉ュ瓨鍌ㄧ殑錛屼笉鏄互“鏌愮緙栫爜鐨勫瓧鑺?#8221;鏉ュ瓨鍌ㄧ殑錛屽洜姝ゅ凡緇忎笉瀛樺湪“瀛楃涓茬殑緙栫爜”榪欎釜姒傚康浜嗐傚彧鏈夊湪“瀛楃涓?#8221;涓?#8220;瀛楄妭涓?#8221;杞寲鏃訛紝鎴栬咃紝灝嗕竴涓?#8220;瀛楄妭涓?#8221;褰撴垚涓涓?ANSI 瀛楃涓叉椂錛屾墠鏈夌紪鐮佺殑姒傚康銆?br>
涓嶅皯鐨勪漢閮芥湁榪欎釜璇В銆?/td>

絎竴縐嶈瑙o紝寰寰鏄鑷翠貢鐮佷駭鐢熺殑鍘熷洜銆傜浜岀璇В錛屽線寰瀵艱嚧鏈潵瀹規槗綰犳鐨勪貢鐮侀棶棰樺彉寰楁洿澶嶆潅銆?/p>

鍦ㄨ繖閲岋紝鎴戜滑鍙互鐪嬪埌錛屽叾涓墍璁茬殑“璇В涓”錛屽嵆閲囩敤姣?#8220;涓涓瓧鑺?#8221;灝辨槸“涓涓瓧絎?#8221;鐨勮漿鍖栨柟娉曪紝瀹為檯涓婁篃灝辯瓑鍚屼簬閲囩敤 iso-8859-1 榪涜杞寲銆傚洜姝わ紝鎴戜滑甯稿父浣跨敤 bytes = string.getBytes("iso-8859-1") 鏉ヨ繘琛岄嗗悜鎿嶄綔錛屽緱鍒板師濮嬬殑“瀛楄妭涓?#8221;銆傜劧鍚庡啀浣跨敤姝g‘鐨?ANSI 緙栫爜錛屾瘮濡?string = new String(bytes, "GB2312")錛屾潵寰楀埌姝g‘鐨?#8220;UNICODE 瀛楃涓?#8221;銆?/p>

鍥為〉棣?/font>

3.2 闈?UNICODE 紼嬪簭鍦ㄤ笉鍚岃璦鐜闂寸Щ妞嶆椂鐨勪貢鐮?/h5>

闈?UNICODE 紼嬪簭涓殑瀛楃涓詫紝閮芥槸浠ユ煇縐?ANSI 緙栫爜褰㈠紡瀛樺湪鐨勩傚鏋滅▼搴忚繍琛屾椂鐨勮璦鐜涓庡紑鍙戞椂鐨勮璦鐜涓嶅悓錛屽皢浼氬鑷?ANSI 瀛楃涓茬殑鏄劇ず澶辮觸銆?/p>

姣斿錛屽湪鏃ユ枃鐜涓嬪紑鍙戠殑闈?UNICODE 鐨勬棩鏂囩▼搴忕晫闈紝鎷垮埌涓枃鐜涓嬭繍琛屾椂錛岀晫闈笂灝嗘樉紺轟貢鐮併傚鏋滆繖涓棩鏂囩▼搴忕晫闈㈡敼涓洪噰鐢?UNICODE 鏉ヨ褰曞瓧絎︿覆錛岄偅涔堝綋鍦ㄤ腑鏂囩幆澧冧笅榪愯鏃訛紝鐣岄潰涓婂皢鍙互鏄劇ず姝e父鐨勬棩鏂囥?/p>

鐢變簬瀹㈣鍘熷洜錛屾湁鏃跺欐垜浠繀欏誨湪涓枃鎿嶄綔緋葷粺涓嬭繍琛岄潪 UNICODE 鐨勬棩鏂囪蔣浠訛紝榪欐椂鎴戜滑鍙互閲囩敤涓浜涘伐鍏鳳紝姣斿錛屽崡鏋佹槦錛孉ppLocale 絳夛紝鏆傛椂鐨勬ā鎷熶笉鍚岀殑璇█鐜銆?/p>

鍥為〉棣?/font>

3.3 緗戦〉鎻愪氦瀛楃涓?/h5>

褰撻〉闈腑鐨勮〃鍗曟彁浜ゅ瓧絎︿覆鏃訛紝棣栧厛鎶婂瓧絎︿覆鎸夌収褰撳墠欏甸潰鐨勭紪鐮侊紝杞寲鎴愬瓧鑺備覆銆傜劧鍚庡啀灝嗘瘡涓瓧鑺傝漿鍖栨垚 "%XX" 鐨勬牸寮忔彁浜ゅ埌 Web 鏈嶅姟鍣ㄣ傛瘮濡傦紝涓涓紪鐮佷負 GB2312 鐨勯〉闈紝鎻愪氦 "涓? 榪欎釜瀛楃涓叉椂錛屾彁浜ょ粰鏈嶅姟鍣ㄧ殑鍐呭涓?"%D6%D0"銆?/p>

鍦ㄦ湇鍔″櫒绔紝Web 鏈嶅姟鍣ㄦ妸鏀跺埌鐨?"%D6%D0" 杞寲鎴?[0xD6, 0xD0] 涓や釜瀛楄妭錛岀劧鍚庡啀鏍規嵁 GB2312 緙栫爜瑙勫垯寰楀埌 "涓? 瀛椼?/p>

鍦?Tomcat 鏈嶅姟鍣ㄤ腑錛宺equest.getParameter() 寰楀埌涔辯爜鏃訛紝甯稿父鏄洜涓哄墠闈㈡彁鍒扮殑“璇В涓”閫犳垚鐨勩傞粯璁ゆ儏鍐典笅錛屽綋鎻愪氦 "%D6%D0" 緇?Tomcat 鏈嶅姟鍣ㄦ椂錛宺equest.getParameter() 灝嗚繑鍥?[0x00D6, 0x00D0] 涓や釜 UNICODE 瀛楃錛岃屼笉鏄繑鍥炰竴涓?"涓? 瀛楃銆傚洜姝わ紝鎴戜滑闇瑕佷嬌鐢?bytes = string.getBytes("iso-8859-1") 寰楀埌鍘熷鐨勫瓧鑺備覆錛屽啀鐢?string = new String(bytes, "GB2312") 閲嶆柊寰楀埌姝g‘鐨勫瓧絎︿覆 "涓?銆?/p>

鍥為〉棣?/font>

3.4 浠庢暟鎹簱璇誨彇瀛楃涓?/h5>

閫氳繃鏁版嵁搴撳鎴風錛堟瘮濡?ODBC 鎴?JDBC錛変粠鏁版嵁搴撴湇鍔″櫒涓鍙栧瓧絎︿覆鏃訛紝瀹㈡埛绔渶瑕佷粠鏈嶅姟鍣ㄨ幏鐭ユ墍浣跨敤鐨?ANSI 緙栫爜銆傚綋鏁版嵁搴撴湇鍔″櫒鍙戦佸瓧鑺傛祦緇欏鎴風鏃訛紝瀹㈡埛绔礋璐e皢瀛楄妭嫻佹寜鐓ф紜殑緙栫爜杞寲鎴?UNICODE 瀛楃涓層?/p>

濡傛灉浠庢暟鎹簱璇誨彇瀛楃涓叉椂寰楀埌涔辯爜錛岃屾暟鎹簱涓瓨鏀劇殑鏁版嵁鍙堟槸姝g‘鐨勶紝閭d箞寰寰榪樻槸鍥犱負鍓嶉潰鎻愬埌鐨?#8220;璇В涓”閫犳垚鐨勩傝В鍐崇殑鍔炴硶榪樻槸閫氳繃 string = new String( string.getBytes("iso-8859-1"), "GB2312") 鐨勬柟娉曪紝閲嶆柊寰楀埌鍘熷鐨勫瓧鑺備覆錛屽啀閲嶆柊浣跨敤姝g‘鐨勭紪鐮佽漿鍖栨垚瀛楃涓層?/p>

鍥為〉棣?/font>

3.5 鐢靛瓙閭歡涓殑瀛楃涓?/h5>

褰撲竴孌?Text 鎴栬?HTML 閫氳繃鐢靛瓙閭歡浼犻佹椂錛屽彂閫佺殑鍐呭棣栧厛閫氳繃涓縐嶆寚瀹氱殑瀛楃緙栫爜杞寲鎴?#8220;瀛楄妭涓?#8221;錛岀劧鍚庡啀鎶?#8220;瀛楄妭涓?#8221;閫氳繃涓縐嶆寚瀹氱殑浼犺緭緙栫爜錛圕ontent-Transfer-Encoding錛夎繘琛岃漿鍖栧緱鍒板彟涓涓?#8220;瀛楄妭涓?#8221;銆傛瘮濡傦紝鎵撳紑涓灝佺數瀛愰偖浠舵簮浠g爜錛屽彲浠ョ湅鍒扮被浼肩殑鍐呭錛?/p>
Content-Type: text/plain;
        charset="gb2312"
Content-Transfer-Encoding: base64

sbG+qcrQuqO17cf4yee74bGjz9W7+b3wudzA7dbQ0MQNCg0KvPKzxqO6uqO17cnnsaPW0NDEDQoNCg==

鏈甯哥敤鐨?Content-Transfer-Encoding 鏈?Base64 鍜?Quoted-Printable 涓ょ銆傚湪瀵逛簩榪涘埗鏂囦歡鎴栬呬腑鏂囨枃鏈繘琛岃漿鍖栨椂錛孊ase64 寰楀埌鐨?#8220;瀛楄妭涓?#8221;姣?Quoted-Printable 鏇寸煭銆傚湪瀵硅嫳鏂囨枃鏈繘琛岃漿鍖栨椂錛孮uoted-Printable 寰楀埌鐨?#8220;瀛楄妭涓?#8221;姣?Base64 鏇寸煭銆?/p>

閭歡鐨勬爣棰橈紝鐢ㄤ簡涓縐嶆洿綆鐭殑鏍煎紡鏉ユ爣娉?#8220;瀛楃緙栫爜”鍜?#8220;浼犺緭緙栫爜”銆傛瘮濡傦紝鏍囬鍐呭涓?"涓?錛屽垯鍦ㄩ偖浠舵簮浠g爜涓〃紺轟負錛?/p>
// 姝g‘鐨勬爣棰樻牸寮?/span>
Subject: =?GB2312?B?1tA=?=

鍏朵腑錛?/p>

  • 絎竴涓?#8220;=?”涓?#8220;?”涓棿鐨勯儴鍒嗘寚瀹氫簡瀛楃緙栫爜錛屽湪榪欎釜渚嬪瓙涓寚瀹氱殑鏄?GB2312銆?
  • “?”涓?#8220;?”涓棿鐨?#8220;B”浠h〃 Base64銆傚鏋滄槸“Q”鍒欎唬琛?Quoted-Printable銆?
  • 鏈鍚?#8220;?”涓?#8220;?=”涔嬮棿鐨勯儴鍒嗭紝灝辨槸緇忚繃 GB2312 杞寲鎴愬瓧鑺備覆錛屽啀緇忚繃 Base64 杞寲鍚庣殑鏍囬鍐呭銆?

濡傛灉“浼犺緭緙栫爜”鏀逛負 Quoted-Printable錛屽悓鏍鳳紝濡傛灉鏍囬鍐呭涓?"涓?錛?/p>
// 姝g‘鐨勬爣棰樻牸寮?/span>
Subject: =?GB2312?Q?=D6=D0?=

濡傛灉闃呰閭歡鏃跺嚭鐜頒貢鐮侊紝涓鑸槸鍥犱負“瀛楃緙栫爜”鎴?#8220;浼犺緭緙栫爜”鎸囧畾鏈夎錛屾垨鑰呮槸娌℃湁鎸囧畾銆傛瘮濡傦紝鏈夌殑鍙戦偖浠剁粍浠跺湪鍙戦侀偖浠舵椂錛屾爣棰?"涓?錛?/p>
// 閿欒鐨勬爣棰樻牸寮?/span>
Subject: =?ISO-8859-1?Q?=D6=D0?=

榪欐牱鐨勮〃紺猴紝瀹為檯涓婃槸鏄庣‘鎸囨槑浜嗘爣棰樹負 [0x00D6, 0x00D0]錛屽嵆 "ÖÐ"錛岃屼笉鏄?"涓?銆?/p>

鍥為〉棣?/font>

4. 鍑犵閿欒鐞嗚В鐨勭籂姝?/h4>

璇В錛?#8220;ISO-8859-1 鏄浗闄呯紪鐮侊紵”

闈炰篃銆俰so-8859-1 鍙槸鍗曞瓧鑺傚瓧絎﹂泦涓渶綆鍗曠殑涓縐嶏紝涔熷氨鏄?#8220;瀛楄妭緙栧彿”涓?#8220;UNICODE 瀛楃緙栧彿”涓鑷寸殑閭g緙栫爜瑙勫垯銆傚綋鎴戜滑瑕佹妸涓涓?#8220;瀛楄妭涓?#8221;杞寲鎴?#8220;瀛楃涓?#8221;錛岃屽張涓嶇煡閬撳畠鏄摢涓縐?ANSI 緙栫爜鏃訛紝鍏堟殏鏃跺湴鎶?#8220;姣忎竴涓瓧鑺?#8221;浣滀負“涓涓瓧絎?#8221;榪涜杞寲錛屼笉浼氶犳垚淇℃伅涓㈠け銆傜劧鍚庡啀浣跨敤 bytes = string.getBytes("iso-8859-1") 鐨勬柟娉曞彲鎭㈠鍒板師濮嬬殑瀛楄妭涓層?/p>

璇В錛?#8220;Java 涓紝鎬庢牱鐭ラ亾鏌愪釜瀛楃涓茬殑鍐呯爜錛?#8221;

Java 涓紝瀛楃涓茬被 java.lang.String 澶勭悊鐨勬槸 UNICODE 瀛楃涓詫紝涓嶆槸 ANSI 瀛楃涓層傛垜浠彧闇瑕佹妸瀛楃涓蹭綔涓?#8220;鎶借薄鐨勭鍙風殑涓?#8221;鏉ョ湅寰呫傚洜姝や笉瀛樺湪瀛楃涓茬殑鍐呯爜鐨勯棶棰樸?/p>

true 2007-04-05 17:14 鍙戣〃璇勮
]]>base64緙栫爜http://m.shnenglu.com/true/archive/2007/04/05/21330.htmltruetrueThu, 05 Apr 2007 08:43:00 GMThttp://m.shnenglu.com/true/archive/2007/04/05/21330.htmlhttp://m.shnenglu.com/true/comments/21330.htmlhttp://m.shnenglu.com/true/archive/2007/04/05/21330.html#Feedback0http://m.shnenglu.com/true/comments/commentRss/21330.htmlhttp://m.shnenglu.com/true/services/trackbacks/21330.htmlBase64緙栫爜鍏跺疄鏄皢3涓?浣嶅瓧鑺傝漿鎹負4涓?浣嶅瓧鑺?( 3*8 = 4*6 = 24 ) 榪?涓叚浣嶅瓧鑺?
鍏跺疄浠嶇劧鏄?浣?鍙笉榪囬珮涓や綅琚緗負0. 褰撲竴涓瓧鑺傚彧鏈?浣嶆湁鏁堟椂,瀹冪殑鍙栧肩┖闂翠負0
鍒?2鐨?嬈℃柟鍑? 鍗?3,涔熷氨鏄琚漿鎹㈢殑Base64緙栫爜鐨勬瘡涓涓紪鐮佺殑鍙栧肩┖闂翠負(0~63)
銆?
浜嬪疄涓婏紝0~63涔嬮棿鐨凙SCII鐮佹湁璁稿涓嶅彲瑙佸瓧絎︼紝鎵浠ュ簲璇ュ啀鍋氫竴涓槧灝勶紝鏄犲皠琛ㄤ負
‘A‘ ~ ‘Z‘ ? ASCII錛? ~ 25錛?
‘a’ ~ ‘z‘ ? ASCII錛?6 ~ 51錛?
‘0’ ~ ‘9‘ ? ASCII錛?2 ~ 61錛?
‘+‘ ? ASCII錛?2錛?
‘/‘ ? ASCII錛?3錛?
榪欐牱灝卞彲浠ュ皢3涓?浣嶅瓧鑺傦紝杞崲涓?涓彲瑙佸瓧絎︺?
鍏蜂綋鐨勫瓧鑺傛媶鍒嗘柟娉曚負錛?鍥撅紙鐢誨緱涓嶅ソ錛岄浼氱簿紲?:-))
aaaaaabb ccccdddd eeffffff
~~~~~~~~ ~~~~~~~~ ~~~~~~~~
瀛楄妭 1 瀛楄妭 2 瀛楄妭 3
||
\/
00aaaaaa 00bbcccc 00ddddee 00ffffff

娉細涓婇潰鐨勪笁涓瓧鑺備綅鍘熸枃錛屼笅闈㈠洓涓瓧鑺備負Base64緙栫爜錛屽叾鍓嶄袱浣嶅潎涓?銆?
榪欐牱鎷嗗垎鐨勬椂鍊欙紝鍘熸枃鐨勫瓧鑺傛暟閲忓簲璇ユ槸3鐨勫嶆暟錛屽綋榪欎釜鏉′歡涓嶈兘婊¤凍鏃訛紝鐢ㄥ叏闆跺瓧鑺?
琛ヨ凍錛岃漿鍖栨椂Base64緙栫爜鐢?鍙蜂唬鏇匡紝榪欏氨鏄負浠涔堟湁浜汢ase64緙栫爜浠ヤ竴涓垨涓や釜絳夊彿緇?
鏉熺殑鍘熷洜錛屼絾絳夊彿鏈澶氭湁涓や釜錛屽洜涓猴細濡傛灉F(origin)浠h〃鍘熸枃鐨勫瓧鑺傛暟錛孎(remain)浠?
琛ㄤ綑鏁幫紝鍒?
F(remain) = F(origin) MOD 3 鎴愮珛銆?
鎵浠(remain)鐨勫彲鑳藉彇鍊間負0,1,2.
濡傛灉璁?n = [F(origin) – F(remain)] / 3
褰揊(remain) = 0 鏃訛紝鎭板ソ杞崲涓?*n涓瓧鑺傜殑Base64緙栫爜銆?
褰揊(remain) = 1 鏃訛紝鐢變簬涓涓師鏂囧瓧鑺傚彲浠ユ媶鍒嗕負灞炰簬涓や釜Base64緙栫爜鐨勫瓧鑺傦紝涓轟簡
璁〣ase64緙栫爜鏄?鐨勫嶆暟錛屾墍浠ュ簲璇ヤ負琛?涓瓑鍙楓?
褰揊(remain) = 2 鏃訛紝鐢變簬涓や釜鍘熸枃瀛楄妭鍙互鎷嗗垎涓哄睘浜?涓狟ase64緙栫爜鐨勫瓧鑺傦紝鍚岀悊錛?
搴旇琛ヤ笂涓涓瓑鍙?nbsp;




true 2007-04-05 16:43 鍙戣〃璇勮
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              亚洲欧洲精品一区二区三区不卡 | 亚洲毛片av| 欧美午夜视频在线| 国产精品嫩草99a| 国产精品一区二区三区久久| 国产精品电影在线观看| 国产精品99免费看 | 9久草视频在线视频精品| 亚洲人成啪啪网站| 亚洲一区精品电影| 久久精品夜夜夜夜久久| 久久免费视频这里只有精品| 久久久久久久久一区二区| 久久久一二三| 欧美成人免费在线| 国产精品久久久久久久免费软件 | 免费成人你懂的| 欧美日韩综合精品| 欧美色一级片| 国产欧美69| 欧美在线不卡| 久热爱精品视频线路一| 欧美风情在线观看| 国产精品毛片a∨一区二区三区|国 | 亚洲日本va午夜在线电影| 一本色道久久综合亚洲精品高清| 亚洲免费视频网站| 久久艳片www.17c.com| 亚洲欧洲日本专区| 久久精品99无色码中文字幕| 欧美精品一区视频| 影音先锋久久| 午夜精品久久久久久99热软件| 美女脱光内衣内裤视频久久影院| 一本色道久久综合精品竹菊 | 国产欧美91| 亚洲美女啪啪| 欧美粗暴jizz性欧美20| 羞羞漫画18久久大片| 欧美精品一区二区视频 | 国产精品乱码久久久久久| 黄色成人免费观看| 小黄鸭精品aⅴ导航网站入口| 亚洲日本一区二区三区| 久久国产精彩视频| 国产乱码精品一区二区三区五月婷| 亚洲高清av| 久久久午夜视频| 亚洲欧美综合国产精品一区| 欧美精品一区二区久久婷婷| 欧美有码视频| 国产精品久久久久aaaa| 日韩午夜激情av| 欧美国产日韩xxxxx| 久久久噜噜噜久久中文字幕色伊伊| 国产精品一区二区三区久久| 亚洲午夜精品网| 宅男精品视频| 国产精品综合| 久久岛国电影| 久久精品国产综合精品| 久久综合久久美利坚合众国| 国产区亚洲区欧美区| 性感少妇一区| 欧美一区二区三区免费在线看 | 女仆av观看一区| 牛牛影视久久网| 亚洲国产另类久久精品| 欧美国产亚洲精品久久久8v| 国产精品igao视频网网址不卡日韩| 在线观看视频日韩| 欧美电影免费观看大全| 久久免费黄色| 亚洲免费福利视频| 99国产麻豆精品| 国产精品人人做人人爽| 小处雏高清一区二区三区| 羞羞视频在线观看欧美| 亚洲国产精品一区| 日韩亚洲欧美一区二区三区| 欧美色精品在线视频| 欧美亚洲在线播放| 久久免费视频在线| 一本久久综合| 性欧美办公室18xxxxhd| 亚洲电影观看| 日韩一区二区精品| 国产精品视频免费观看| 免费精品视频| 欧美日韩亚洲一区二区三区在线 | 麻豆视频一区二区| 欧美精品自拍| 欧美亚洲综合在线| 麻豆精品国产91久久久久久| 亚洲午夜小视频| 久久米奇亚洲| 亚洲自拍偷拍网址| 老司机精品视频网站| 亚洲综合视频一区| 老司机成人网| 欧美中文字幕视频| 欧美极品aⅴ影院| 久久精品一区四区| 欧美另类videos死尸| 久久久久久亚洲综合影院红桃| 久久综合九色欧美综合狠狠| 亚洲综合视频网| 欧美激情精品久久久久久大尺度 | 亚洲国产影院| 国产综合欧美| 中文一区二区| 在线一区二区三区四区| 久久久青草青青国产亚洲免观| 中日韩男男gay无套| 久久久精品视频成人| 午夜国产一区| 欧美日韩在线三级| 欧美激情bt| 狠狠色丁香婷婷综合久久片| 宅男精品导航| 宅男66日本亚洲欧美视频 | 国产主播精品| 一个色综合av| 一区二区三区av| 欧美成人情趣视频| 欧美阿v一级看视频| 亚洲一区二区成人| 亚洲免费电影在线观看| 久久亚洲国产精品日日av夜夜| 欧美一区二区三区免费在线看| 欧美日韩a区| 亚洲国产精品久久久| 亚洲国产精品尤物yw在线观看| 久久精品一二三| 久久精品视频在线看| 国产欧美一区二区三区沐欲| 亚洲在线免费视频| 欧美在线免费观看视频| 国产伦理一区| 亚洲欧美日韩精品在线| 欧美中文日韩| 在线观看视频日韩| 欧美高清在线观看| 99精品国产高清一区二区| 亚洲一区二区三区乱码aⅴ| 欧美日韩国产a| 一本色道综合亚洲| 亚洲欧美电影院| 国产精品私房写真福利视频 | 久久久一本精品99久久精品66| 国产欧美短视频| 久久久久久久久久久久久女国产乱| 久久综合久久久久88| 在线免费观看视频一区| 你懂的国产精品| 99精品视频一区| 久久久噜噜噜久久人人看| 黄色日韩网站| 欧美极品欧美精品欧美视频| 亚洲天堂激情| 免费在线看成人av| 一区二区三区日韩欧美| 国产精品视频一区二区高潮| 久久精品99久久香蕉国产色戒| 亚洲国产欧美国产综合一区| 亚洲欧美激情在线视频| 黄色国产精品| 欧美性猛交xxxx乱大交退制版| 欧美一区二区三区精品| 亚洲国产你懂的| 久久国产精品毛片| 91久久极品少妇xxxxⅹ软件| 欧美日韩中字| 麻豆久久精品| 午夜免费电影一区在线观看| 亚洲激情视频在线播放| 久久精品国产99国产精品| 亚洲人成人99网站| 国产有码在线一区二区视频| 欧美激情综合亚洲一二区 | 久久久久久久999精品视频| 亚洲精品久久在线| 老色鬼精品视频在线观看播放| 99精品国产在热久久下载| 韩国成人精品a∨在线观看| 欧美日韩精品| 久久人人97超碰精品888| 亚洲香蕉成视频在线观看| 亚洲欧美国产三级| 欧美一级大片在线免费观看| 国产精品无码永久免费888| av成人毛片| 欧美freesex交免费视频| 亚洲国产日韩欧美在线图片| 欧美电影美腿模特1979在线看| 国产一区二区中文字幕免费看| 亚洲网站在线播放| 久久久久国产精品www| 久久久久久久久久久久久女国产乱 | 亚洲第一天堂av|