天天看点

Unicode转为UTF8

Unicode转换为UTF8

要说这个转换也简单,使用WideCharToMultiByte两次或者直接一次就可以转换。

今天在弄VLC的时候,由于VLC的视频文件名使用UTF8编码,因此当路径中包含中文的时候(其播放函数的参数为char*),直接使用 char*(ANSI)

或者 用WCHAR*(UNICODE)  将UNICODE转为ANSI的char*都不行。

有事上网查得知VLC用了UTF8,英文数字用都用1个字节,中文用3个字节来编码。

于是很容易想到用WideCharToMultiByte(CP_UTF8,...)来转换,于是开始动手搞:

 单步调试的时候发现:最后的szU8中,路径中的中文为乱码!

 上网查,得知在单步调试的时候,调试器看到char*还会认为是ANSI,所以用ANSI编码来解读,所以看到的是乱码。

所以直接使用了此代码,发现报【断言失败】,看不出在哪里断言失败的。

经过查看代码发现是在ASSERT(PathFileExists(lpFileName))这里报断言失败,即不存在此文件!

于是一(ˇ?ˇ) 想,

这里的lpFileName为转换后的UTF8的编码,那就先把此行注释掉,把检测文件是否存在的操作放到Unicode2UTF8之前。

改过后:一切正常!