簡體   English   中英

C - wchar_t打印不需要的字符

[英]C - wchar_t prints unwanted characters

嘿。

我想列出一個包含非英文字符文件的文件夾。 下面的函數接受一個參數,比如C:\\並列出其中的文件。 但不是100%正確。 對於土耳其語字符,它會打印一些符號,即使我使用了wchar_t類型。

void listFolder(const wchar_t* path){
DIR *dir;
struct _wdirent *dp;
wchar_t * file_name;
wchar_t  fullpath[MAX_PATH];
dir = _wopendir(path);

while ((dp=_wreaddir(dir)) != NULL) {
    //printf("[i]debug: \t%s\n", dp->d_name);
    if ( !wcscmp(dp->d_name, L".") || !wcscmp(dp->d_name, L"..") ){
        // do nothing
    } 
    else {
        file_name = dp->d_name; // use it
        wprintf(L"[*]file_name: \t\"%ls\"\n",file_name);
    }
}
_wclosedir(dir);

}

我目前正在使用帶有CodeBlocks 16.01的Windows 7 x64

奇怪的是, 使用CodeBlocks的Ubuntu 16.04下同樣的功能完全正常

DIR *dir用於ANSI,而不是Unicode。 請改用_WDIR

Windows對打印Unicode的支持有限。 在MinGW中使用WriteConsoleW來打印Unicode。 例:

#include <stdio.h>
#include <dirent.h>
#include <sys/stat.h>
#include <windows.h>

void myprint(const wchar_t* str)
{
    WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE), str, wcslen(str), NULL, NULL);
}

void listFolder(const wchar_t* path)
{
    _WDIR *dir = _wopendir(path);
    if (!dir) return;

    struct _wdirent *dp;
    while ((dp=_wreaddir(dir)) != NULL)
    {
        if ( wcscmp(dp->d_name, L".") == 0 || wcscmp(dp->d_name, L"..") == 0)
            continue;
        myprint(dp->d_name);
        wprintf(L"\n");
    }
    _wclosedir(dir);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM