【问题标题】:CFileDialog getpathName not reading JapaneseCFileDialog getpathName 不读日语
【发布时间】:2011-12-25 06:40:04
【问题描述】:

我有一个日文的文件夹名称。 CFileDialog getpathNameis 选择文件夹时返回一些问号。有什么办法解决吗?

【问题讨论】:

  • 代码 sn-p?您的应用是否启用了 Unicode 支持?
  • 这是与 Visual-c++(或其他?)相关的问题,而不是一般的 C++。更具体地使用标签有助于能够回答此问题的人看到它,帮助其他社区成员找到问题,并增加您获得答案的几率。这是双赢的;]
  • 你怎么知道GetPathName 没有返回日文字符?问题可能出在显示结果的代码中,而不是GetPathName 本身?
  • @Roman 不,它不是在启用 Unicode 支持的情况下构建的
  • @Mark 当我单步执行代码时,GetPathName 返回的 cstring 显示一些“?????”代替日文文本

标签: visual-c++ unicode mfc cjk filedialog


【解决方案1】:

如果您的应用是使用 MBCS 支持而不是 Unicode 支持构建的,那么只有当您的 “非 Unicode 程序的语言”(又名系统区域设置)设置为日语时,才会正确处理日语路径,对于您的日本用户来说是这样,但如果您不是日本人,则可能不是这样。

如果您的系统区域设置不是日语,则在GetPathName() 返回之前,该路径将转换为您的代码页。它将包含替换 (?) 字符或垃圾。很可能两者兼而有之。

以下是一些可用的可能性:

  1. 不要做任何事情。您的应用程序应该适用于大多数日本用户。还是不...

  2. 在日语代码页下测试您的应用程序。为此,请暂时更改非 Unicode 程序的语言(需要重新启动)或(更容易)在 AppLocale 下测试您的应用程序。 (注意:是的,它在 Windows 7 下运行良好。This article may help 如果您有问题)。

  3. 将其切换为 Unicode。根据您的代码库的大小,这可能是一项非常繁琐的任务,主要取决于输入和输出以及您是否在代码中使用_T("blah") 字符串文字。当然,它还有更多方面,但这些是最重要的。顺便说一句,所有新项目都应该考虑到 Unicode 支持。

  4. 专门处理此路径问题。因为我们说的是文件对话框,所以整个对话框应该以 Unicode 格式打开。这意味着您可能必须显式调用底层 Win32 API 的 Unicode 版本,而不是简单地调用CFileDialog。它并没有那么复杂,但风险在于您只解决了连续的第一个问题。正确设置日语路径后,您将不得不处理用户输入的日语文本,......所以我认为这个解决方案不是一个好的解决方案。

解决方案 #2 无疑是识别小问题的最快方法。从长远来看,解决方案#3 肯定是最好的。但请确保您确实需要它,因为它可能对现有应用程序来说很乏味。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 2023-03-07
    • 2015-12-16
    • 2011-10-05
    • 2017-05-29
    • 1970-01-01
    相关资源
    最近更新 更多