字符串转码问题

hellobocai2020 2015-09-02 02:10:19
在C++中,打开文件获得文件路径等相关信息:"file:///C:\\Users\\Public\\Videos\\Sample Videos\\CM友BEAUTY CLINIC王妃.mp4"。好像是unicode类型的。然后转成UTF-8。再通过强转为unsigned char*,传给下面C程序解析处理。在C里面怎么打印unsigned char*的值来比较对不对?
同样的操作方法,在WPF中,用C#来实现,中文、英文都可以播放,就日文不能播放?同时unsigned char*类型在C#中对应类型不对?我试的是string和IntPtr。
...全文
212 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-09-07
  • 打赏
  • 举报
回复
总之楼主记住,使用Unicode字符集。代码中所有字符串常量都要加前缀L
hellobocai2020 2015-09-07
  • 打赏
  • 举报
回复
引用 7 楼 zhao4zhong1 的回复:
个人意见:不应转码,应改用支持Unicode的文件操作函数。
我也不想啊,赵4老师。这个要支持日文文件播放的。原本是用C++的winform做的。现在要用C#、WPF来实现,用的DLL库。各种问题。而且我是新人。悲剧
赵4老师 2015-09-07
  • 打赏
  • 举报
回复
个人意见:不应转码,应改用支持Unicode的文件操作函数。
hellobocai2020 2015-09-07
  • 打赏
  • 举报
回复
引用 5 楼 UAVGCS 的回复:
[quote=引用 4 楼 yuxiaoxuan1991 的回复:] 我换个问题问一下大神们 我是C#中通过ShowDialog打开一个视频文件,把文件名等路径相关信息保存为string类型,并把它转码成UTF-8。但为什么只要视频文件的名称为奇数(X.mp4)时,解码后打开无法播放。如果视频文件的名称为偶数(XX.mp4)时,解码后就可以播放。怎么回事?
你打开时 用的是全路径(绝对路径)还是filename?[/quote] 我是这样写的: if (cfd.ShowDialog() == CommonFileDialogResult.OK){ ContentsInf = "file:///" + cfd.FileName; string a = ConvertToMutiByte(ContentsInf);//调用转码的函数 } 转码函数这样的: private string ConvertToMutiByte(string str) { int i = 0; i = WideCharToMultiByte(65001, 0, str, -1, null, 0, IntPtr.Zero, IntPtr.Zero); StringBuilder MultiByte = new StringBuilder(i); WideCharToMultiByte(65001, 0, str, -1, MultiByte, MultiByte.Capacity, IntPtr.Zero, IntPtr.Zero); string s = MultiByte.ToString(); return s; }
Pokeeeer 2015-09-07
  • 打赏
  • 举报
回复
引用 4 楼 yuxiaoxuan1991 的回复:
我换个问题问一下大神们 我是C#中通过ShowDialog打开一个视频文件,把文件名等路径相关信息保存为string类型,并把它转码成UTF-8。但为什么只要视频文件的名称为奇数(X.mp4)时,解码后打开无法播放。如果视频文件的名称为偶数(XX.mp4)时,解码后就可以播放。怎么回事?
你打开时 用的是全路径(绝对路径)还是filename?
hellobocai2020 2015-09-07
  • 打赏
  • 举报
回复
我换个问题问一下大神们 我是C#中通过ShowDialog打开一个视频文件,把文件名等路径相关信息保存为string类型,并把它转码成UTF-8。但为什么只要视频文件的名称为奇数(X.mp4)时,解码后打开无法播放。如果视频文件的名称为偶数(XX.mp4)时,解码后就可以播放。怎么回事?
hellobocai2020 2015-09-02
  • 打赏
  • 举报
回复
引用 1 楼 topses 的回复:
看了三遍,不知道楼猪想表达什么?写了一段也没能说明自己的问题, 也就楼猪你自己懂.
简单点就是说C#一个string变量的内容是:"file:///C:\Users\Public\Videos\Sample Videos\CM 沢尻エリカ たかの友梨 BEAUTY CLINIC 王妃の.mp4",要把这个string变量编码转成UTF8,传给底层的DLL处理。转码后的值是错误的,转码失败。相对于C++中进行同样的操作时对的。
hellobocai2020 2015-09-02
  • 打赏
  • 举报
回复
引用 楼主 yuxiaoxuan1991 的回复:
在C++中,打开文件获得文件路径等相关信息:"file:///C:\\Users\\Public\\Videos\\Sample Videos\\CM友BEAUTY CLINIC王妃.mp4"。好像是unicode类型的。然后转成UTF-8。再通过强转为unsigned char*,传给下面C程序解析处理。在C里面怎么打印unsigned char*的值来比较对不对? 同样的操作方法,在WPF中,用C#来实现,中文、英文都可以播放,就日文不能播放?同时unsigned char*类型在C#中对应类型不对?我试的是string和IntPtr。
简单点就是说C#一个string变量的内容是:"file:///C:\Users\Public\Videos\Sample Videos\CM 沢尻エリカ たかの友梨 BEAUTY CLINIC 王妃の.mp4",要把这个string变量编码转成UTF8,传给底层的DLL处理。转码后的值是错误的,转码失败。相对于C++中进行同样的操作时对的。
坚果侠 2015-09-02
  • 打赏
  • 举报
回复
看了三遍,不知道楼猪想表达什么?写了一段也没能说明自己的问题, 也就楼猪你自己懂.

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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