Col*_*len 0 c++ unicode winapi character-encoding
我们的应用程序在运行时调用ShGetFolderPath来获取My Documents文件夹.这通常很有效.但是,对于三个用户 - Дмитрий,Jörg和Jörgen(看看你是否可以发现模式!) - 该调用会返回一些非常奇怪的结果.例如,对于Дмитрий,调用返回:
c:\Users\???????\Documents
Run Code Online (Sandbox Code Playgroud)
我假设有一些字符编码shenanigan在这里,可能与Unicode有关,但我没有任何相关的经验.如何从窗口中获取文件夹(和其他相关文件夹)的有用路径,而无需通过注册表项来查看信息?
在给我的电子邮件中,Дмитрий("Dmitry")告诉我他的"我的文档"文件夹实际上位于此处:
C:\Users\43D6~1\Documents
Run Code Online (Sandbox Code Playgroud)
所以我知道有一种方法可以从Windows获得"正常"版本的路径,我只是不知道它是什么.
背景:我们的应用程序不支持unicode,并使用标准的"char*"字符串.我们怎样才能获得"正常"的路径?我不反对调用函数的"unicode"版本,然后将其转换为"普通"文本,如果可能的话.完全将应用程序转换为使用unicode不是一种选择(我们没有时间).
谢谢.
继续以Unicode获取文件路径.然后调用GetShortPathNameW转换为短路径名组件.输出不应包含ASCII范围之外的任何字符,即使它是Unicode函数.然后,您可以将每个Unicode字符截断回8位以创建char
字符串.