gpt4 book ai didi

c - 使用C代码在Windows上读取带有波兰语字符的文件名

转载 作者:行者123 更新时间:2023-11-30 17:29:28 25 4
gpt4 key购买 nike

我必须指出,为 Windows 平台开发代码目前对我来说是一个谜。

我在浏览目录和读取存在波兰语字符的文件时遇到问题。以下代码片段适用于英语和波兰语版本的 Windows,但不适用于德语。什么原因?我尝试过使用 POSIX opendir()/readdir() 和 winapi FindFirstFile()/FindNextFile() > 功能。他们给出了相同的结果。
考虑以下计划。它读取测试目录中的文件(以 POSIX 和 winapi 方式)并将其打印出来。

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <dirent.h>

int main(void)
{
char* name;
name = _getcwd(NULL, 0);

char* tmp = realloc(name, strlen(name)*2);
if (tmp != NULL) {
name = tmp;
}
else {
perror("realloc");
free(name);
exit(1);
}

strcat(name, "\\test");
DIR* dir = opendir(name);
struct dirent* s;
while ((s = readdir(dir)) != NULL) {
printf("%s\n", s->d_name);
}
closedir(dir);
free(s);

strcat(name, "\\*");
HANDLE dir_w;
WIN32_FIND_DATA s_w;
if ((dir_w = FindFirstFile(name, &s_w)) != INVALID_HANDLE_VALUE) {
while (FindNextFile(dir_w, &s_w) != 0) {
printf("%s\n", s_w.cFileName);
}
}
FindClose(dir_w);

free(name);

return 0;
}

问题:在使用德语的 Windows 上,波兰语字符被解释为 ASCII 字符。例如,如果文件有名称:

ąęćś.txt

然后在英语语言窗口上它会被正确读取,但在德语窗口上会被读取为

aecs.txt

但是这样的文件不存在。我应该使用 wchar_t 类型和特定于它的函数 (FindNextFilew) 吗?我没有德国 window ,所以我很难重现该错误。我一直在尝试使用命令 chcp 1250 更改代码页,但这没有帮助。将 locale 设置为 pl 也没有帮助。

编译器:gcc 5.0.0

最佳答案

您调用的 C 标准库函数将使用 ANSI 编码文本,我确信您知道它无法处理国际文本。

因此,您需要使用 native Unicode Windows API,而不是旧的 ANSI 版本。这意味着基于 wchar_t 的函数带有 W 前缀,例如 FindFirstFileW。首先,您应该启用 Unicode 条件,以便 FindFirstFile 宏扩展为 FindFirstFileW

关于c - 使用C代码在Windows上读取带有波兰语字符的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25606359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com