#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
{
//qDebug() << "unknown word";
}
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)
{
QString 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);
}
return pinyins;
}
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 8
没有合适的资源?快使用搜索试试~ 我知道了~
ChineseLetterHelper.rar
共2个文件
h:1个
cpp:1个
需积分: 9 1 下载量 64 浏览量
2019-06-05
18:06:06
上传
评论
收藏 14KB RAR 举报
温馨提示
本代码可以解析大部分汉字,部分复杂的没有收录的汉字无法解析
资源推荐
资源详情
资源评论
收起资源包目录
ChineseLetterHelper.rar (2个子文件)
ChineseLetterHelper
ChineseLetterHelper.h 589B
ChineseLetterHelper.cpp 80KB
共 2 条
- 1
资源评论
兜黎
- 粉丝: 80
- 资源: 22
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功