VS2010 UNICODE变量转中文

david_love2019 2014-03-03 12:38:47
收到PHP传来的UNICODE的字符串"\u59d3\u540d\u4e0d\u5408\u6cd5",VS项目字符集是UNICODE,请问如何转成中文,如果在项目中硬编码如:string str="\u59d3\u540d\u4e0d\u5408\u6cd5" 会直接显示中文,但是如果是通过外部传入的字符串"\u59d3\u540d\u4e0d\u5408\u6cd5" 再赋值,无法获得中文。
...全文
1695 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zx_pisan 2014-11-03
  • 打赏
  • 举报
回复
//tool 1,lpwszStr需要外部删除此内存//////////////////////////////////////////////////////////////////////// DWORD MByteToWChar(const char *lpcszStr, wchar_t **lpwszStr) { // Get the required size of the buffer that receives the Unicode // string. DWORD dwMinSize = 0; dwMinSize = MultiByteToWideChar (CP_ACP, 0, lpcszStr, -1, NULL, 0); if (dwMinSize > 0) { wchar_t *pwText = new wchar_t[dwMinSize]; if(!pwText) { delete []pwText; pwText = NULL; dwMinSize = 0; } if (dwMinSize) { // Convert headers from ASCII to Unicode. MultiByteToWideChar (CP_ACP, 0, lpcszStr, -1, pwText, dwMinSize); // if (lpwszStr) { *lpwszStr = pwText; } } } return dwMinSize; } //,lpwszStr需要外部删除此内存 BOOL WCharToMByte(const wchar_t* lpcwszStr, char **lpszStr) { DWORD dwMinSize; dwMinSize = WideCharToMultiByte(CP_OEMCP,NULL,lpcwszStr,-1,NULL,0,NULL,FALSE); if (dwMinSize > 0) { char *sText = new char[dwMinSize]; if(!sText) { delete []sText; sText = NULL; dwMinSize = 0; } if (dwMinSize > 0) { WideCharToMultiByte(CP_OEMCP,NULL,lpcwszStr,-1,sText,dwMinSize,NULL,FALSE); if (lpszStr) { *lpszStr = sText; } } } return dwMinSize; } //例子:///////////////////////////////////////////////////////////////////////////////////////// typedef std::string String; String CString2String( const CString& str ) { String strRe; CString strSrc(str); #if _UNICODE char* ch=NULL; WCharToMByte(strSrc.GetBuffer(strSrc.GetLength()+1), &ch); if (ch) { strRe = ch; } delete ch; ch = NULL; strSrc.ReleaseBuffer(strSrc.GetLength()+1); #else strRe = strSrc.GetBuffer(strSrc.GetLength()+1); strSrc.ReleaseBuffer(strSrc.GetLength()+1); #endif return strRe; } CString String2CString( const String& str ) { CString strRe; wchar_t* ch=NULL; MByteToWChar(str.c_str(), &ch); if (ch) { strRe = ch; } delete ch; ch = NULL; return strRe; }
sky320 2014-10-10
  • 打赏
  • 举报
回复
我也遇到这问题了,不知道如何解决,还请高人给个明确的代码啊,新手,见谅。。。
  • 打赏
  • 举报
回复
这里显然,使用了 linq。所以要引用命名空间
using System.Linq;
  • 打赏
  • 举报
回复
引用 楼主 canary_83 的回复:
收到PHP传来的UNICODE的字符串"\u59d3\u540d\u4e0d\u5408\u6cd5",VS项目字符集是UNICODE,请问如何转成中文,如果在项目中硬编码如:string str="\u59d3\u540d\u4e0d\u5408\u6cd5" 会直接显示中文,但是如果是通过外部传入的字符串"\u59d3\u540d\u4e0d\u5408\u6cd5" 再赋值,无法获得中文。
你对 c# 开发环境的字符串不理解,所以才会产生后边的这个错误描述。如果你在调试时看到的一个字符串内容如果是“\u59d3\u540d\u4e0d\u5408\u6cd5”,那么这个字符串表示为c#的字符串常量,就应该是“\\u59d3\\u540d\\u4e0d\\u5408\\u6cd5”。不理解这个原理,你就找不到解决方法。 转换为 unicode 字符串很简单,可以写
var bytes = src.Split(new string[] { "\\u" }, StringSplitOptions.RemoveEmptyEntries);
var result = new string(bytes.Select(x => (char)Convert.ToInt16(x, 16)).ToArray());
但是要搞懂原理,理解为什么要使用"\\u” 而不是 "\u“ 来分割 char 数组。要搞懂这个道理。
  • 打赏
  • 举报
回复
引用 2 楼 xtaje24 的回复:

            byte[] srcarr = Encoding.Default.GetBytes("\u59d3\u540d\u4e0d\u5408\u6cd5");
            byte[] desarr = Encoding.Convert(Encoding.Default, Encoding.UTF8, srcarr);
            string s = Encoding.UTF8.GetString(desarr, 0, desarr.Length);
这个怎样,好使不
楼主的意思,是
string src = "\\u59d3\\u540d\\u4e0d\\u5408\\u6cd5";
收到的是这样的内容,而不是
string src = "\u59d3\u540d\u4e0d\u5408\u6cd5"
这样的。
用户 昵称 2014-09-13
  • 打赏
  • 举报
回复
字符串本身是unicode格式的。
YOKIGORE 2014-08-03
  • 打赏
  • 举报
回复
我遇到过这个类似的,解决掉了。 需要的话,加分,仍代码给你。
XR_JO 2014-07-09
  • 打赏
  • 举报
回复

            byte[] srcarr = Encoding.Default.GetBytes("\u59d3\u540d\u4e0d\u5408\u6cd5");
            byte[] desarr = Encoding.Convert(Encoding.Default, Encoding.UTF8, srcarr);
            string s = Encoding.UTF8.GetString(desarr, 0, desarr.Length);
这个怎样,好使不
Michael_pd 2014-07-09
  • 打赏
  • 举报
回复
Unicode 的字符在内存中占两个字节,比如\u59d3,内存中可能是\u05090d030,(0表示内存中是00),所以无法转换。 如果你string str=L"\u59d3“也是无法转换的。 先要将收到的字符转换成多字节的,才能进行转换。

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧