大家好,欢迎来到IT知识分享网。
#ifndef CHINESELETTERHELPER_H #define CHINESELETTERHELPER_H #include <QObject> class ChineseLetterHelper {
// 根据GB2312编码 public: static bool In(wchar_t start, wchar_t end, wchar_t code); static char Convert(int n); // 获取第一个汉字的首字母 static QString GetFirstLetter(const QString &src); // 获取所有汉字的首字母 static QString GetFirstLetters(const QString &src); // 获取一个汉字编码的汉语拼音 static QString GetPinyin(int code); // 获取所有汉字的汉语拼音 static QString GetPinyins(const QString& text); }; #endif // CHINESELETTERHELPER_H ```f #include <QDebug> #include "chineseletterhelper.h" bool ChineseLetterHelper::In(wchar_t start, wchar_t end, wchar_t code) {
if (code >= start && code <= end) {
return true; } return false; } char ChineseLetterHelper::Convert(int n) {
/* * GB2312码范围 (B0A1-F7FE) * HiByte (B0-F7) LoByte (A1-FE) * * GBK编码范围 (8140-FEFE) * 包含三大部分 * 1.汉字区 * a. GB2312汉字区。即GBK/2 * b. GB13000.1扩充汉字区。包括GBK/3(CJK汉字)和GBK/4(CJK汉字和增补汉字) * 2.图形符号区 * a. GB2312非汉字区。即GBK/1 A1A1-A9FE。还有10个小写罗马数字和GB12345增补符号 * b. GB13000.1扩充非汉字区。即GBK/5 A840-A9A0非汉字符号、结构符... * 3.用户自定义区 * */ if (In(0xB0A1,0xB0C4,n)) return 'A'; if (In(0XB0C5,0XB2C0,n)) return 'B'; if (In(0xB2C1,0xB4ED,n)) return 'C'; if (In(0xB4EE,0xB6E9,n)) return 'D'; if (In(0xB6EA,0xB7A1,n)) return 'E'; if (In(0xB7A2,0xB8c0,n)) return 'F'; if (In(0xB8C1,0xB9FD,n)) return 'G'; if (In(0xB9FE,0xBBF6,n)) return 'H'; if (In(0xBBF7,0xBFA5,n)) return 'J'; if (In(0xBFA6,0xC0AB,n)) return 'K'; if (In(0xC0AC,0xC2E7,n)) return 'L'; if (In(0xC2E8,0xC4C2,n)) return 'M'; if (In(0xC4C3,0xC5B5,n)) return 'N'; if (In(0xC5B6,0xC5BD,n)) return 'O'; if (In(0xC5BE,0xC6D9,n)) return 'P'; if (In(0xC6DA,0xC8BA,n)) return 'Q'; if (In(0xC8BB,0xC8F5,n)) return 'R'; if (In(0xC8F6,0xCBF0,n)) return 'S'; if (In(0xCBFA,0xCDD9,n)) return 'T'; if (In(0xCDDA,0xCEF3,n)) return 'W'; if (In(0xCEF4,0xD188,n)) return 'X'; if (In(0xD1B9,0xD4D0,n)) return 'Y'; if (In(0xD4D1,0xD7F9,n)) return 'Z'; if (In(0x00, 0x7f, n)) return n; return '\0'; } QString ChineseLetterHelper::GetFirstLetter(const QString &src) {
wchar_t wchr; QString firstLetter; if(src.size() > 0) {
QString str = src.at(0); QByteArray arr = str.toLocal8Bit(); if(arr.size() == 1) {
wchr = arr.at(0) & 0xff; } else if(arr.size() == 2) {
wchr = (arr.at(0) & 0xff) << 8; wchr |= (arr.at(1) & 0xff); } else {
} char c = Convert(wchr); if(c != 0) {
firstLetter.append(c); } } return firstLetter; } QString ChineseLetterHelper::GetFirstLetters(const QString &src) {
QString firstLetters; for (int i=0; i<src.length(); i++) {
QString str = src.at(i); QByteArray arr = str.toLocal8Bit(); wchar_t wchr; if(arr.size() == 1) {
wchr = arr.at(0) & 0xff; } else if(arr.size() == 2) {
wchr = (arr.at(0) & 0xff) << 8; wchr |= (arr.at(1) & 0xff); } else {
//qDebug() << "unknown word"; } char c = Convert(wchr); if(c != 0) {
firstLetters.append(c); } } return firstLetters; } QString ChineseLetterHelper::GetPinyins(const QString &text) {
QStringList pinyins; for (int i=0; i<text.length(); i++) {
QString str = text.at(i); QByteArray arr = str.toLocal8Bit(); unsigned char high = 0; unsigned char low = 0; int code = 0; if(arr.size() == 1) {
high = 0; low = arr.at(0) & 0xff; } else if(arr.size() == 2) {
high = arr.at(0) & 0xff; low = arr.at(1) & 0xff; } if ( high < 0xa1 || low < 0xa1) {
continue; } else {
code = (high - 0xa0) * 100 + low - 0xa0; } // pinyins += GetPinyin(code); // pinyins += " "; pinyins.append(GetPinyin(code)); } return pinyins.join(' '); } QString ChineseLetterHelper::GetPinyin(int code) {
QString pinyin(""); switch(code) {
case 6325: case 6436: case 7571: case 7925: pinyin="A"; break; case 6263: case 6440: case 7040: case 7208: case 7451: case 7733: case 7945: case 8616: pinyin="AI"; break; case 5847: case 5991: case 6278: case 6577: case 6654: case 7281: case 7907: case 8038: case 8786: pinyin="AN"; break; pinyin="ANG"; break; case 5974: case 6254: case 6427: case 6514: case 6658: case 6959: case 7033: case 7081: case 7365: case 8190: case 8292: case 8643: case 8701: case 8773: pinyin="AO"; break; case 6056: case 6135: case 6517: case 7857: case 8446: case 8649: case 8741: pinyin="BA"; break; case 6267: case 6334: case 7494: pinyin="BAI"; break; case 5870: case 5964: case 7851: case 8103: case 8113: case 8418: pinyin="BAN"; break; case 6182: case 6826: pinyin="BANG"; break; case 6165: case 7063: case 7650: case 8017: case 8157: case 8532: case 8621: pinyin="BAO"; break; case 5635: case 5873: case 5893: case 5993: case 6141: case 6703: case 7753: case 8039: case 8156: case 8645: case 8725: pinyin="BEI"; break; case 5946: case 5948: case 7458: case 7928: pinyin="BEN"; break; case 6452: case 7420: pinyin="BENG"; break; case 5616: case 5734: case 6074: case 6109: case 6221: case 6333: case 6357: case 6589: case 6656: case 6725: case 6868: case 6908: case 6986: case 6994: case 7030: case 7052: case 7221: case 7815: case 7873: case 7985: case 8152: case 8357: case 8375: case 8387: case 8416: case 8437: case 8547: case 8734: pinyin="BI"; break; case 5650: case 5945: case 6048: case 6677: case 6774: case 7134: case 7614: case 7652: case 7730: case 7760: case 8125: case 8159: case 8289: case 8354: case 8693: pinyin="BIAN"; break; case 7027: case 7084: case 7609: case 7613: case 7958: case 7980: case 8106: case 8149: case 8707: case 8752: pinyin="BIAO"; break; case 8531: pinyin="BIE"; break; case 5747: case 6557: case 7145: case 7167: case 7336: case 7375: case 7587: case 7957: case 8738: case 8762: pinyin="BIN"; break; case 5787: case 5891: case 6280: pinyin="BING"; break; case 5781: case 6403: case 6636: case 7362: case 7502: case 7771: case 7864: case 8030: case 8404: case 8543: case 8559: pinyin="BO"; break; case 6318: case 6945: case 7419: case 7446: case 7848: case 7863: case 8519: pinyin="BU"; break; case 6474: case 7769: pinyin="CA"; break; pinyin="CAI"; break; case 6978: case 7078: case 7218: case 8451: case 8785: pinyin="CAN"; break; case 5687: pinyin="CANG"; break; case 6448: case 6878: case 8309: case 8429: pinyin="CAO"; break; case 6692: pinyin="CE"; break; case 6515: case 6825: pinyin="CEN"; break; case 6465: pinyin="CENG"; break; case 6639: case 6766: case 7017: case 7230: case 7311: case 7322: case 7363: case 7942: case 7979: case 8135: pinyin="CHA"; break; case 5713: case 7846: case 8091: case 8218: pinyin="CHAI"; break; case 5770: case 5838: case 6159: case 6667: case 6893: case 6904: case 6981: case 7031: case 7086: case 7472: case 7688: case 7966: case 8324: case 8580: pinyin="CHAN"; break; case 5686: case 5943: case 6041: case 6137: case 6660: case 6568: case 6749: case 7029: case 7047: case 7438: case 7509: case 8680: pinyin="CHANG"; break; case 6687: case 7443: case 8173: pinyin="CHAO"; break; case 5969: case 7726: pinyin="CHE"; break; case 5840: case 5863: case 6251: case 6433: case 6923: case 7201: case 7320: case 7755: case 8619: pinyin="CHEN"; break; case 5609: case 5984: case 7239: case 7263: case 7583: case 7810: case 7881: case 7905: case 8146: case 8241: case 8508: pinyin="CHENG"; break; case 5749: case 6015: case 6061: case 6319: case 6374: case 6420: case 6445: case 6633: case 7042: case 7523: case 7787: case 8023: case 8101: case 8161: case 8231: case 8304: case 8355: case 8388: case 8489: case 8556: case 8746: pinyin="CHI"; break; case 6091: case 6671: case 6731: case 8409: case 8430: pinyin="CHONG"; break; case 5717: case 6492: case 6716: case 8112: case 8637: pinyin="CHOU"; break; case 5601: case 5927: case 6680: case 6732: case 7109: case 7238: case 7290: case 7343: case 8150: case 8260: case 8573: case 8777: pinyin="CHU"; break; case 6285: case 6408: case 7590: case 8563: pinyin="CHUAI"; break; case 6622: case 6955: case 7516: case 7843: case 8413: pinyin="CHUAN"; break; case 6675: pinyin="CHUANG"; break; case 5879: case 7302: case 7319: pinyin="CHUI"; break; case 6127: case 8040: case 8277: pinyin="CHUN"; break; case 7401: case 8554: case 8626: pinyin="CHUO"; break; pinyin="CI"; break; case 6075: case 6358: case 7684: case 8043: case 8457: pinyin="4337 伺"; break; case 6042: case 6840: case 7085: case 7193: case 7214: case 7240: pinyin="CONG"; break; case 7308: case 7403: case 7577: pinyin="COU"; break; case 6180: case 6562: case 6607: case 7367: case 8501: case 8530: case 8577: pinyin="CU"; break; case 5764: case 6305: case 7664: case 7973: pinyin="CUAN"; break; case 6718: case 6145: case 6393: case 7213: case 7333: case 7505: case 8631: pinyin="CUI"; break; case 6666: case 8169: pinyin="CUN"; break; case 5640: case 6547: case 7566: case 7917: case 7983: case 8078: case 8526: case 8567: pinyin="CUO"; break; case 6239: case 6353: case 6410: case 6682: case 7007: case 8155: case 8346: case 8716: case 8718: pinyin="DA"; break; case 6004: case 6316: case 6523: case 6942: case 7110: case 7173: case 8776: pinyin="DAI"; break; case 5757: case 6144: case 6402: case 7373: case 7470: case 7781: case 8067: case 8087: case 8185: case 8376: pinyin="DAN"; break; case 5852: case 5942: case 6148: case 6920: case 7724: case 7885: case 8141: pinyin="DANG"; break; case 6322: case 6665: case 7514: case 8478: pinyin="DAO"; break; case 7929: pinyin="DE"; break; case 6466: case 6556: case 7413: case 7767: case 7975: case 8403: pinyin="DENG"; break; case 5621: case 5765: case 5814: case 5848: case 5901: case 5970: case 6122: case 6454: case 7023: case 7116: case 7260: case 7306: case 7475: case 7738: case 7758: case 7791: case 7965: case 8438: case 8730: pinyin="DI"; break; case 6439: pinyin="DIA"; break; case 5871: case 5967: case 6559: case 7172: case 7868: case 8116: case 8118: case 8401: case 8558: pinyin="DIAN"; break; case 7886: case 8585: case 8684: pinyin="DIAO"; break; case 5976: case 6006: case 6273: case 6409: case 7526: case 8012: case 8183: case 8562: case 8688: pinyin="DIE"; break; case 5674: case 6404: case 7164: case 7575: case 7754: case 7814: case 8059: case 8184: case 8490: pinyin="DING"; break; case 7891: pinyin="DIU"; break; case 5977: case 6343: case 6520: case 6528: case 7517: case 7543: case 7556: case 7747: case 8020: pinyin="DONG"; break; case 6190: case 8128: case 8229: case 8391: pinyin="DOU"; break; case 6022: case 6429: case 6834: case 7292: case 7525: case 8328: case 8338: case 8739: case 8782: pinyin="DU"; break; case 7318: case 7649: case 8393: pinyin="DUAN"; break; case 7701: case 7713: case 7752: pinyin="DUI"; break; case 6771: case 7632: case 7727: case 7766: case 7779: case 7970: case 8527: pinyin="DUN"; break; case 6345: case 6365: case 6785: case 7122: case 7876: case 8154: case 8566: pinyin="DUO"; break; case 5612: case 5832: case 5844: case 5949: case 6035: case 6113: case 6164: case 6332: case 6721: case 6977: case 7025: case 7378: case 7581: case 7916: case 7941: case 8042: case 8206: case 8689: pinyin="E"; break; case 6176: case 6284: pinyin="EN"; break; case 5706: case 6939: case 7177: case 7879: case 8025: case 8660: pinyin="ER"; break; case 5950: case 7732: pinyin="FA"; break; case 6212: case 6232: case 6506: case 7283: case 7660: case 7818: case 8576: pinyin="FAN"; break; case 5890: case 7242: case 7853: case 8419: case 8648: pinyin="FANG"; break; case 6032: case 6584: case 6713: case 6839: case 6990: case 7119: case 7328: case 7572: case 7619: case 7673: case 7948: case 8082: case 8267: case 8385: case 8468: case 8613: case 8678: pinyin="FEI"; break; case 5739: case 6915: case 7291: case 8687: case 8787: pinyin="FEN"; break; case 5726: case 5926: case 6155: case 6384: case 6767: case 7731: pinyin="FENG"; break; pinyin="FO"; break; case 8330: pinyin="FOU"; break; case 5775: case 5776: case 5914: case 6029: case 6062: case 6119: case 6142: case 6252: case 6327: case 6505: case 6686: case 6870: case 6985: case 7058: case 7066: case 7106: case 7108: case 7285: case 7471: case 7680: case 7741: case 7774: case 7775: case 7823: case 7991: case 8005: case 8222: case 8261: case 8280: case 8283: case 8479: case 8535: case 8538: case 8654: case 8691: pinyin="FU"; break; case 6246: case 7056: case 7057: case 7424: case 7837: pinyin=" GA"; break; case 5604: case 5875: case 5982: case 7414: case 7464: pinyin="GAI"; break; case 5965: case 6053: case 6247: case 6306: case 6779: case 6838: case 6887: case 7104: case 7347: case 7426: case 7723: case 8065: case 8491: pinyin="GAN"; break; case 7716: case 7824: case 8364: pinyin="GANG"; break; case 5626: case 5830: case 5912: case 6227: case 7141: case 7332: case 7334: case 7429: case 7915: pinyin="GAO"; break; case 5610: case 5678: case 5933: case 5957: case 6010: case 6435: case 7092: case 7501: case 7585: case 7749: case 7951: case 8143: case 8220: case 8420: case 8732: pinyin="GE"; break; pinyin="GEI"; break; case 5608: case 6102: case 6371: case 8462: pinyin="GEN"; break; case 6376: case 6657: case 7114: case 8665: pinyin="GENG"; break; case 7178: case 7537: case 8228: case 8601: pinyin="GONG"; break; case 5694: case 5824: case 6524: case 6960: case 7037: case 7135: case 7259: case 7477: case 7616: case 8349: case 8384: case 8724: pinyin="GOU"; break; case 5637: case 5812: case 6152: case 6536: case 6773: case 7284: case 7379: case 7484: case 7486: case 7591: case 7617: case 7813: case 7825: case 7860: case 7932: case 8019: case 8083: case 8233: case 8494: case 8593: case 8681: case 8729: pinyin="GU"; break; case 5652: case 5820: case 6341: case 7273: case 7550: case 8027: pinyin="GUA"; break; pinyin="GUAI"; break; case 5736: case 6124: case 6272: case 6842: case 7834: case 8057: case 8170: case 8704: pinyin="GUAN"; break; case 6359: case 6578: case 7270: case 7555: pinyin="GUANG"; break; case 5648: case 5659: case 6649: case 7003: case 7277: case 7433: case 7448: case 8007: case 8394: case 8657: case 8712: pinyin="GUI"; break; case 5782: case 7121: case 7762: case 8671: pinyin="GUN"; break; case 5769: case 6266: case 6335: case 6494: case 6538:
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/139907.html