亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? qiconvcodec.cpp

?? QT 開發環境里面一個很重要的文件
?? CPP
字號:
/******************************************************************************** Copyright (C) 1992-2006 Trolltech ASA. All rights reserved.**** This file is part of the QtCore module of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file.  Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include "qiconvcodec_p.h"#include <errno.h>#include <locale.h>#include <stdio.h>// unistd.h is needed for the _XOPEN_UNIX macro#include <unistd.h>#if defined(_XOPEN_UNIX) && !defined(Q_OS_QNX6) && !defined(Q_OS_OSF)#  include <langinfo.h>#endif#if defined(Q_OS_HPUX)#  define NO_BOM#  define UTF16 "ucs2"#elif defined(Q_OS_AIX)#  define NO_BOM#  define UTF16 "UCS-2"#else#  define UTF16 "UTF-16"#endifQIconvCodec::QIconvCodec()    : utf16Codec(0){    utf16Codec = QTextCodec::codecForMib(1015);    Q_ASSERT_X(utf16Codec != 0,               "QIconvCodec::convertToUnicode",               "internal error, UTF-16 codec not found");    if (!utf16Codec) {        fprintf(stderr, "QIconvCodec::convertToUnicode: internal error, UTF-16 codec not found\n");        utf16Codec = reinterpret_cast<QTextCodec *>(~0);    }}QIconvCodec::~QIconvCodec(){}QString QIconvCodec::convertToUnicode(const char* chars, int len, ConverterState *) const{    if (utf16Codec == reinterpret_cast<QTextCodec *>(~0))        return QString::fromAscii(chars, len);    iconv_t cd = createIconv_t(UTF16, 0);    if (cd == reinterpret_cast<iconv_t>(-1)) {        static int reported = 0;        if (!reported++) {            fprintf(stderr,                    "QIconvCodec::convertToUnicode: using ASCII for conversion, iconv_open failed\n");        }        return QString::fromAscii(chars, len);    }    size_t inBytesLeft = len;    // best case assumption, each byte is converted into one UTF-16 character, plus 2 bytes for the BOM    QByteArray ba;    size_t outBytesLeft = len * 2 + 2;    ba.resize(outBytesLeft);#ifdef GNU_LIBICONV    // GNU doesn't disagree with POSIX :/    const char *inBytes = chars;#else    char *inBytes = const_cast<char *>(chars);#endif    char *outBytes = ba.data();    do {        size_t ret = iconv(cd, &inBytes, &inBytesLeft, &outBytes, &outBytesLeft);        if (ret == (size_t) -1) {            switch (errno) {            case EILSEQ:            case EINVAL:                {                    ++inBytes;                    --inBytesLeft;                    break;                }            case E2BIG:                {                    int offset = ba.size() - outBytesLeft;                    ba.resize(ba.size() * 2);                    outBytes = ba.data() + offset;                    outBytesLeft = ba.size() - offset;                    break;                }            default:                {                    // note, cannot use qWarning() since we are implementing the codecForLocale :)                    perror("QIconvCodec::convertToUnicode: using ASCII for conversion, iconv failed");                    iconv_close(cd);                    return QString::fromAscii(chars, len);                }            }        }    } while (inBytesLeft != 0);    QString s = utf16Codec->toUnicode(ba.constData(), ba.size() - outBytesLeft);    iconv_close(cd);    return s;}QByteArray QIconvCodec::convertFromUnicode(const QChar *uc, int len, ConverterState *) const{    iconv_t cd = createIconv_t(0, UTF16);    if (cd == reinterpret_cast<iconv_t>(-1)) {        static int reported = 0;        if (!reported++) {            fprintf(stderr,                    "QIconvCodec::convertFromUnicode: using ASCII for conversion, iconv_open failed\n");        }        return QString(uc, len).toAscii();    }    size_t outBytesLeft = len;    QByteArray ba;    ba.resize(outBytesLeft);    char *outBytes = ba.data();#if defined(GNU_LIBICONV)    const char *inBytes;#else    char *inBytes;#endif    size_t inBytesLeft;#if !defined(NO_BOM)    // give iconv() a BOM    QChar bom[] = { QChar(QChar::ByteOrderMark) };#ifdef GNU_LIBICONV    // GNU doesn't disagree with POSIX :/    inBytes = reinterpret_cast<const char *>(bom);#else    inBytes = reinterpret_cast<char *>(bom);#endif    inBytesLeft = sizeof(bom);    if (iconv(cd, &inBytes, &inBytesLeft, &outBytes, &outBytesLeft) == (size_t) -1) {        perror("QIconvCodec::convertFromUnicode: using ASCII for conversion, iconv failed for BOM");        return QString(uc, len).toAscii();    }#endif // NO_BOM    // now feed iconv() the real data#ifdef GNU_LIBICONV    // GNU doesn't disagree with POSIX :/    inBytes = reinterpret_cast<const char *>(uc);#else    inBytes = const_cast<char *>(reinterpret_cast<const char *>(uc));#endif    inBytesLeft = len * sizeof(QChar);    do {        if (iconv(cd, &inBytes, &inBytesLeft, &outBytes, &outBytesLeft) == (size_t) -1) {            switch (errno) {            case EILSEQ:            case EINVAL:                {                    ++inBytes;                    --inBytesLeft;                    break;                }            case E2BIG:                {                    int offset = ba.size() - outBytesLeft;                    ba.resize(ba.size() * 2);                    outBytes = ba.data() + offset;                    outBytesLeft = ba.size() - offset;                    break;                }            default:                {                    // note, cannot use qWarning() since we are implementing the codecForLocale :)                    perror("QIconvCodec::convertFromUnicode: using ASCII for conversion, iconv failed");                    iconv_close(cd);                    return QString(uc, len).toAscii();                }            }        }    } while (inBytesLeft != 0);    iconv_close(cd);    ba.resize(ba.size() - outBytesLeft);    return ba;}QByteArray QIconvCodec::name() const{    return "System";}int QIconvCodec::mibEnum() const{    return 0;}iconv_t QIconvCodec::createIconv_t(const char *to, const char *from){    Q_ASSERT((to == 0 && from != 0) || (to != 0 && from == 0));    iconv_t cd = (iconv_t) -1;#if defined(__GLIBC__) || defined(GNU_LIBICONV)    // both GLIBC and libgnuiconv will use the locale's encoding if from or to is an empty string    char *codeset = "";    cd = iconv_open(to ? to : codeset, from ? from : codeset);#else    char *codeset = 0;#endif#if defined(_XOPEN_UNIX) && !defined(Q_OS_QNX6) && !defined(Q_OS_OSF)    if (cd == (iconv_t) -1) {        codeset = nl_langinfo(CODESET);        if (codeset)            cd = iconv_open(to ? to : codeset, from ? from : codeset);    }#endif    if (cd == (iconv_t) -1) {        // Very poorly defined and followed standards causes lots of        // code to try to get all the cases... This logic is        // duplicated in QTextCodec, so if you change it here, change        // it there too.        // Try to determine locale codeset from locale name assigned to        // LC_CTYPE category.        // First part is getting that locale name.  First try setlocale() which        // definitely knows it, but since we cannot fully trust it, get ready        // to fall back to environment variables.        char * ctype = qstrdup(setlocale(LC_CTYPE, 0));        // Get the first nonempty value from $LC_ALL, $LC_CTYPE, and $LANG        // environment variables.        char * lang = qstrdup(qgetenv("LC_ALL").constData());        if (!lang || lang[0] == 0 || strcmp(lang, "C") == 0) {            if (lang) delete [] lang;            lang = qstrdup(qgetenv("LC_CTYPE").constData());        }        if (!lang || lang[0] == 0 || strcmp(lang, "C") == 0) {            if (lang) delete [] lang;            lang = qstrdup(qgetenv("LANG").constData());        }        // Now try these in order:        // 1. CODESET from ctype if it contains a .CODESET part (e.g. en_US.ISO8859-15)        // 2. CODESET from lang if it contains a .CODESET part        // 3. ctype (maybe the locale is named "ISO-8859-1" or something)        // 4. locale (ditto)        // 5. check for "@euro"        // 1. CODESET from ctype if it contains a .CODESET part (e.g. en_US.ISO8859-15)        codeset = ctype ? strchr(ctype, '.') : 0;        if (codeset && *codeset == '.') {            ++codeset;            cd = iconv_open(to ? to : codeset, from ? from : codeset);        }        // 2. CODESET from lang if it contains a .CODESET part        codeset = lang ? strchr(lang, '.') : 0;        if (cd == (iconv_t) -1 && codeset && *codeset == '.') {            ++codeset;            cd = iconv_open(to ? to : codeset, from ? from : codeset);        }        // 3. ctype (maybe the locale is named "ISO-8859-1" or something)        if (cd == (iconv_t) -1 && ctype && *ctype != 0 && strcmp (ctype, "C") != 0)            cd = iconv_open(to ? to : ctype, from ? from : ctype);        // 4. locale (ditto)        if (cd == (iconv_t) -1 && lang && *lang != 0)            cd = iconv_open(to ? to : lang, from ? from : lang);        // 5. "@euro"        if (cd == (iconv_t) -1 && ctype && strstr(ctype, "@euro") || lang && strstr(lang, "@euro"))            cd = iconv_open(to ? to : "ISO8859-15", from ? from : "ISO8859-15");        delete [] ctype;        delete [] lang;    }    return cd;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩中文字幕麻豆| 午夜精品一区二区三区三上悠亚| 欧美一区二区二区| 欧美一区二区免费观在线| 538prom精品视频线放| 欧美日本国产视频| 日韩欧美中文字幕一区| 欧美大片一区二区三区| 2023国产一二三区日本精品2022| 欧美不卡一区二区| 国产日韩欧美麻豆| 国产精品成人一区二区艾草| 亚洲伦理在线精品| 日本欧美一区二区三区| 麻豆精品在线观看| 国产v综合v亚洲欧| 色噜噜夜夜夜综合网| 91精品国产91久久久久久最新毛片 | 欧美激情在线看| 国产精品毛片久久久久久久| 国产精品久久久久久久久免费樱桃 | 国产一区二区按摩在线观看| 成人精品视频一区| 欧美三级日韩三级| 久久久影院官网| 亚洲丝袜精品丝袜在线| 日本不卡高清视频| 97精品电影院| 欧美一级专区免费大片| 国产精品乱人伦中文| 亚洲va中文字幕| 国产一区二区三区免费在线观看| 色综合天天综合网天天看片| 欧美一三区三区四区免费在线看 | jizzjizzjizz欧美| 在线综合+亚洲+欧美中文字幕| 国产色91在线| 丝袜美腿亚洲色图| a级高清视频欧美日韩| 91精品国产一区二区三区| 中文字幕精品一区二区精品绿巨人 | 久久99国产精品麻豆| 日本丰满少妇一区二区三区| 日韩欧美在线不卡| 一区二区三区四区国产精品| 激情图区综合网| 欧美日韩精品一区二区三区蜜桃| 国产精品无遮挡| 久久精品72免费观看| 91美女蜜桃在线| 久久精品在这里| 精品一区二区三区久久久| 欧美日韩三级在线| 一区二区三区色| av电影在线观看一区| 日本一区二区免费在线观看视频| 另类小说欧美激情| 欧美理论电影在线| 亚洲愉拍自拍另类高清精品| 成人黄色一级视频| 国产亚洲欧美在线| 国产一区二区美女| 精品国产乱码久久久久久闺蜜| 亚洲午夜在线电影| 欧美在线观看一区二区| 亚洲在线一区二区三区| 色综合色狠狠综合色| 国产精品国产自产拍在线| 国产精品66部| 中文字幕精品一区二区精品绿巨人| 狠狠久久亚洲欧美| 久久久91精品国产一区二区精品 | 国产欧美日韩激情| 国产高清不卡二三区| 久久久久久久久久久久电影| 国产麻豆精品在线观看| 久久久亚洲国产美女国产盗摄| 九九精品一区二区| 久久久久亚洲蜜桃| 成人性视频免费网站| 亚洲天堂av一区| 欧美色图片你懂的| 性久久久久久久久| 日韩欧美一二三区| 国产成a人亚洲| 日韩毛片精品高清免费| 欧美亚洲国产bt| 日韩精品乱码免费| 久久精品亚洲精品国产欧美kt∨ | 国产夫妻精品视频| 国产精品福利电影一区二区三区四区| www.亚洲免费av| 亚洲国产精品视频| 日韩三级视频在线观看| 国产高清不卡一区| 一区二区三区中文字幕电影| 欧美日韩精品免费观看视频| 美女视频黄a大片欧美| 国产女人水真多18毛片18精品视频 | 国产网站一区二区三区| 色综合久久88色综合天天| 午夜久久久久久久久| 久久久精品国产免费观看同学| 一本色道久久加勒比精品| 男女男精品视频网| 亚洲婷婷国产精品电影人久久| 91麻豆精品国产91久久久使用方法| 国产在线不卡一区| 亚洲大片免费看| 国产色一区二区| 3d动漫精品啪啪一区二区竹菊 | 欧美色大人视频| 国产精品综合在线视频| 亚洲成人一二三| 国产欧美精品一区aⅴ影院| 欧美日韩国产片| av在线这里只有精品| 精品一区二区日韩| 亚洲成人7777| 亚洲视频一二区| 欧美不卡一二三| 91精品久久久久久久91蜜桃| 不卡的电影网站| 国产精品综合网| 男人的j进女人的j一区| 亚洲国产欧美另类丝袜| 中文字幕永久在线不卡| 久久久综合视频| 精品久久久久久久久久久久久久久久久 | 亚洲色图丝袜美腿| 久久久久久亚洲综合| 欧美成人精品高清在线播放 | 国产综合成人久久大片91| 亚洲一级二级在线| 亚洲免费大片在线观看| 日本一区二区三区国色天香 | 久久99精品久久久久婷婷| 亚洲国产一区二区a毛片| 国产精品久久一级| 久久精品一区四区| 久久久久久久久久久久久女国产乱| 欧美一二三区精品| 日韩一区二区麻豆国产| 日韩一区二区不卡| 日韩欧美一级二级三级| 日韩欧美国产午夜精品| 日韩久久久精品| 精品捆绑美女sm三区| 精品国产乱码久久久久久免费| 日韩三级电影网址| 日韩免费电影一区| 久久亚洲综合av| 久久精品一区二区三区不卡牛牛 | 中文字幕亚洲一区二区va在线| 亚洲精品一线二线三线| 欧美mv日韩mv国产网站| 精品卡一卡二卡三卡四在线| 久久精品一二三| 国产精品久久久久精k8| 一个色在线综合| 亚洲成人一区在线| 精品在线播放免费| 国产91精品欧美| 色播五月激情综合网| 欧美日韩成人综合在线一区二区 | 久久人人97超碰com| 精品乱码亚洲一区二区不卡| 国产午夜精品一区二区| 国产精品午夜免费| 亚洲国产日韩一级| 裸体一区二区三区| 成人伦理片在线| 91久久一区二区| 欧美一区二视频| 久久久久国色av免费看影院| 中文字幕在线观看不卡视频| 亚洲gay无套男同| 精品一区二区三区欧美| 91香蕉视频黄| 日韩午夜精品电影| 国产精品福利电影一区二区三区四区| 一区二区三区四区在线播放| 美女视频一区二区| 色综合久久久久久久久| 欧美一级一区二区| 一区二区中文字幕在线| 日韩电影免费在线| 99久久婷婷国产综合精品电影 | 精品日韩一区二区| 成人免费在线视频| 久久99久久99精品免视看婷婷| 成人免费看黄yyy456| 91麻豆精品国产91久久久久久 | 欧美v日韩v国产v| 自拍偷拍国产精品| 国产尤物一区二区在线| 欧美日本一区二区| 亚洲天堂网中文字| 高清shemale亚洲人妖| 欧美一区二区三区不卡|