string转utf8后解决TTS识别中文的问题
来源:互联网 发布:淘宝 旧版本 ipad 编辑:程序博客网 时间:2024/05/16 08:47
今天遇到string字符编码的问题,因为遇到了用TTS将文本转语音的一个API,里面的中文必须是utf8的,我传了一个uncode编码的中文进去,就一直不能正常读出来,后来才发现是编码的问题。这里在网上找到两个API,可将string 传成utf8编码的string,挺好用的。
记录下来:
std::string string_To_UTF8(const std::string & str){ int nwLen = ::MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, NULL, 0); wchar_t * pwBuf = new wchar_t[nwLen + 1];//一定要加1,不然会出现尾巴 ZeroMemory(pwBuf, nwLen * 2 + 2); ::MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.length(), pwBuf, nwLen); int nLen = ::WideCharToMultiByte(CP_UTF8, 0, pwBuf, -1, NULL, NULL, NULL, NULL); char * pBuf = new char[nLen + 1]; ZeroMemory(pBuf, nLen + 1); ::WideCharToMultiByte(CP_UTF8, 0, pwBuf, nwLen, pBuf, nLen, NULL, NULL); std::string retStr(pBuf); delete []pwBuf; delete []pBuf; pwBuf = NULL; pBuf = NULL; return retStr;}BOOL IsTextUTF8(char* str,ULONGLONG length){ DWORD nBytes=0;//UFT8可用1-6个字节编码,ASCII用一个字节 UCHAR chr; BOOL bAllAscii=TRUE; //如果全部都是ASCII, 说明不是UTF-8 for(int i=0; i<length; ++i) { chr= *(str+i); if( (chr&0x80) != 0 ) // 判断是否ASCII编码,如果不是,说明有可能是UTF-8,ASCII用7位编码,但用一个字节存,最高位标记为0,o0xxxxxxx bAllAscii= FALSE; if(nBytes==0) //如果不是ASCII码,应该是多字节符,计算字节数 { if(chr>=0x80) { if(chr>=0xFC&&chr<=0xFD) nBytes=6; else if(chr>=0xF8) nBytes=5; else if(chr>=0xF0) nBytes=4; else if(chr>=0xE0) nBytes=3; else if(chr>=0xC0) nBytes=2; else return FALSE; nBytes--; } } else //多字节符的非首字节,应为 10xxxxxx { if( (chr&0xC0) != 0x80 ) return FALSE; nBytes--; } } if( nBytes > 0 ) //违返规则 return FALSE; if( bAllAscii ) //如果全部都是ASCII, 说明不是UTF-8 return FALSE; return TRUE;}
2 0
- string转utf8后解决TTS识别中文的问题
- mysql_query设置字符集为utf8,解决中文乱码的问题
- utf8解决JSP中文乱码问题
- utf8解决JSP中文乱码问题
- perl 解决mysql utf8中文乱码 问题
- MySQL的中文UTF8问题
- linux下QT程序与windows程序中文字符串传输编码问题的一点解决,utf8转gbk
- 解决eclipse中对于中文字符的识别问题
- C#中文乱码解决:UTF8 转 UNICODE
- 设置MySql5.5数据库的字符编码为UTF8,解决中文乱码问题
- mysql_query('set names utf8')解决浏览器或者数据库中文乱码的问题?
- Linux/Windows下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题)
- windows7下gvim打开UTF8无bom文件中文乱码问题的解决
- Linux下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题)
- Linux下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题)
- CentOS 7下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题)
- Linux下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题)
- Linux下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题)
- 诸葛教你简单灵活学会数据报表,玩转数据分析~
- loadrunner的pacing
- MySQL Workbench 执行更新或删除操作时出现 1175错误 安全更新限制
- tomcat 调优攻略
- android 开发如何将数据封装成对象以及从对象中获取出来
- string转utf8后解决TTS识别中文的问题
- SAT阅读练习题:Reading Comprehension Test 3
- win7下安装redmine2.3.2
- Android应用程序资源的编译和打包过程分析
- 越过谎言去拥抱你
- 2015年6月23日-ps图像大小
- 一、简单工厂模式(Static Factory Method)
- loadrunner的pacing-2
- 黑马程序员——Java常用类笔记(上)【Object类/Scanner类、String类/StringBuffer类、包装类】