博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
string转utf8后解决TTS识别中文的问题
阅读量:5875 次
发布时间:2019-06-19

本文共 1693 字,大约阅读时间需要 5 分钟。

今天遇到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
=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;}

转载地址:http://swkix.baihongyu.com/

你可能感兴趣的文章
判断点是否在三角形内
查看>>
Android实战简易教程-第二十三枪(基于Baas的用户注冊验证username是否反复功能!)...
查看>>
在odl中怎样实现rpc
查看>>
leetcode 110 Balanced Binary Tree
查看>>
python活用isdigit方法显示系统进程
查看>>
项目开发总结
查看>>
知行合一
查看>>
jmeter插件之jsonpath提取响应结果和做断言
查看>>
发布支持多线程的PowerShell模块 —— MultiThreadTaskRunner
查看>>
Ubuntu ctrl+alt会导致窗口还原的问题
查看>>
第四十期百度技术沙龙笔记整理
查看>>
推荐系统那点事 —— 基于Spark MLlib的特征选择
查看>>
linux 下RTL8723/RTL8188调试记录(命令行)【转】
查看>>
開始新的征程
查看>>
SpringMVC案例1——对User表进行CRUD操作
查看>>
看雪CTF第十四题
查看>>
模拟生命_吸烟致癌?
查看>>
[Contiki系列论文之1]Contiki——为微传感器网络而生的轻量级的、灵活的操作系统...
查看>>
Android 网络编程 记录
查看>>
微软同步发行Windows 10和Windows 10 Mobile系统更新
查看>>