我正在尝试使用将文本(印地语或任何其他非英语语言)读入数据结构的程序。指向此文本的部分是void *
指针。如何使用fprintf
打印此文本的子字符串?
编辑:
/* some text manipulation stuff. */
wchar_t *origString = L"इसरो ने लॉन्च किया पहला 'मेड इन इंडिया' स्पेस शटल, PM बोले- ये असाधारण और प्रेरणादायक काम";
void *pText = (void *)origString;
wchar_t *newString = (wchar_t*)pText;
fprintf(stdout, "Old String: %ls\n", origString);
fprintf(stdout, "New string: %ls\n", newString);
在输出中,我只看到特殊的,不可打印的字符(不是我期望的UTF-8编码)。
编辑:
我正在使用一些第三方代码来读取文本(使用非英语语言)并进一步处理。我还需要在控制台上显示此文本
这是第三方代码正在做的事情:
1.获取文件的大小
2.读入(通过fread
)整个文本并使用void *
指向此blob。
3.我试图弄清楚如何操纵这个文本 - 我怎么把它打印出来?
答案 0 :(得分:5)
除了基于UTF-8的语言环境之外,任意宽字符串都不能转换为可以输出的内容。在程序启动时,初始语言环境是" C"。您必须调用tempList.removeAll(tempList2);
来激活字符编码的默认语言环境,这在现代系统上应该是基于UTF-8的。 (正如我最初所说的那样,您也可以使用setlocale(LC_CTYPE,"")
来激活所有区域设置类别,而不仅仅是字符编码,但是这可能会产生很多后果,可能会破坏所有使用小数点的函数。)< / p>
setlocale(LC_ALL,"")
并且演员阵容与您的问题无关。在指针类型之间转换不会转换它们指向的数据。
答案 1 :(得分:1)
打印此文本的子字符串
根据需要投射指针并提供子字符串长度:
FILE *out; /* init FILE */
void *pointer; /* init pv */;
size_t offset; /* start of substring */
unsigned length; /* substring length */
fprintf(out, "%*s", length, (char *) pointer + offset);