【发布时间】:2015-09-04 06:43:38
【问题描述】:
问题陈述: 我需要将生成的字符串转换为 UTF8 字符串,这个生成的字符串扩展了 ascii 字符,我在 Linux 系统(2.6.32-358.el6.x86_64)上。
POC 仍在进行中,因此我只能提供少量代码示例 完整的解决方案只有在准备好后才能发布。
为什么需要 UFT8(我已扩展 ascii 字符以存储在必须为 UTF8 的字符串中)。
我是如何进行的:
- 将生成的字符串转换为 wchar_t 字符串。
请看下面的示例代码
int main(){
char CharString[] = "Prova";
iconv_t cd;
wchar_t WcharString[255];
size_t size= mbstowcs(WcharString, CharString, strlen(CharString));
wprintf(L"%ls\n", WcharString);
wprintf(L"%s\n", WcharString);
printf("\n%zu\n",size);
}
这里有一个问题:
输出是
普罗瓦?????
s
- 为什么这里没有打印尺寸?
- 为什么第二个 printf 只打印一个字符。
- 如果我在两个打印字符串之前打印 size,则只打印 5 个并且控制台中缺少两个字符串。
继续第二部分:
现在我将有一个 wchar_t 字符串,我想将其转换为 UTF8 字符串
为此,我正在浏览并发现 iconv 在这里会有所帮助。
这里有问题 这些是我在manual找到的方法
**iconv_t iconv_open(const char *, const char *);
size_t iconv(iconv_t, char **, size_t *, char **, size_t *);
int iconv_close(iconv_t);**
在输入 iconv 之前,我需要将 wchar_t 数组转换回 char 数组吗?
请就上述问题提出建议。
我正在谈论的扩展 ascii 请参阅下面标记的快照中的字母 i
【问题讨论】:
-
不是
wprintf(L"s\n", WcharString);应该是wprintf(L"%s\n", CharString);还是什么? -
部分相关:在 Linux 上几乎没有人使用
wchar_t,但所有字符串通常都是以 UTF-8 编码的窄字符串 (char *);您是明确选择使用wchar_t(如果是,为什么?)还是您正在使用的某个库要求使用它? -
您输入的扩展ASCII是什么意思?它是一个字节数组,其中每个字节对应一个字符,即使对于 128 及以上的值也是如此?那你为什么要使用
wchar_t?一个简单的表格,其中包含 256 个条目的相应 UTF-8 字节序列,您就完成了。 -
@SouravGhosh 是的,如果我把屏幕截图放在这里,我错过了,
-
没有“扩展ascii”之类的东西。