2014-07-01 46 views
-1

我需要从std :: wstring转换为ISO Latin1。在阅读了几个论坛后,我陷入了困惑。 wstring支持unicode字符集,其中每个字符集都是两个字节,其中ISO Latin1仅为1个字节。但是前两个256码点对于两者来说都是相同的。从std :: wstring转换为ISO ++ Latin1格式在c + +

  1. ISO Latin-1是多字节字符串吗?如果是这样,我需要使用wstombs()从wstring转换为ISO Latin-1

2.我是否需要将输入wstring转换为ISO LATIN-1,如果是的话如何实现? 请帮我理解这一点。

+1

您确定要ISO拉丁文1(ISO 8859-1)吗? Windows上最常见的编码是CP-1252,它非常相似,但并不完全相同。 “使用字符集标签ISO-8859-1对Windows-1252文本进行错误标记是非常常见的。” http://en.wikipedia.org/wiki/Windows-1252 –

+1

另请注意,'std :: wstring'可容纳大量无法转换为ISO Latin 1或Windows CP-1252的字符。 –

+0

是的,我希望我的wstring被转换为ISO Latin-1。用户给我wstring,我的api只带有ISO拉丁字符。我知道ISO latin-1只有8位,但wchar_t是16位。我是否需要明确截断?我如何实现这一目标?任何示例都会有所帮助.... – user3794634

回答

1

在Windows中wchar_t是16位。

当没有代理对(字符表示为2个连续的wchar_t值)时,您知道任何wchar_t值是012是-1的拉丁-1,否则不是。

代理对值很容易识别,因为它们处于为此保留的值范围。

实际上,这意味着您知道任何wchar_t值为012-ld256是Latin-1,否则不管代理对。

并且否,Latin-1不是多字节编码。 “多字节”是指每个字符的字节数可以变化的编码。

+1

@ user3794634:重申声明'std :: wstring = L“ABCdefgh $%^ &*";',它是有效的,但是有什么意义 - 你为什么要发布它? –

+0

std :: wstring x = L”ABCdef!@#$ “; wchar_t的* wcharptr = x.c_str(); 字符*抛光轮=新的char [11]; 趣(WCHAR *吨ARG)//哪个actaully应此WCHAR转换为ISO Latin1的阵列 { \t为(I = 0; I <10;我++) { \t抛光轮[I] = ARG [I]; //为这个buff现在包含ISO拉丁1串或不 } } – user3794634

+0

我需要是转换的wstring char * buffer。由于wstring字符是16位,char是8位,如果char va lue <256,直接分配不工作。如果被复制,char *缓冲区现在被认为是ISO Latin1或不是。 – user3794634

相关问题