2010-09-09 117 views
1

如何使用microsoft visual studio 2005将扩展ascii中编码的std :: string转换为utf8?将扩展ascii转换为utf8

我使用谷歌的协议缓存,它的抱怨在我的字符串非UTF8字符,如果我给它无需转换,这是真的......

+2

你所说的“扩展的意思是ASCII“? – 2010-09-09 16:21:57

+0

没有“扩展ASCII”这样的东西。您首先需要找出编码(如ISO 8859-1 aka Latin-1或某些Windows代码页)。 – DarkDust 2010-09-09 16:24:27

+0

http://en.wikipedia.org/wiki/Extended_ASCII我猜我在谈论ISO-8859-1 – foke 2010-09-09 16:24:55

回答

2

使用MultiByteToWideChar将字符串转换为UTF-16,然后使用WideCharToMultiByte将其转换为UTF-8。

+0

MultiByteToWideChar将UTF-8转换为UTF-16,这是错误 – Andrey 2010-09-09 16:32:52

+0

@Andrey:上次我查看了这个问题(我自己承认很久以前),除了通过UTF-16的路由之外,我没有发现其他方法。 – sbi 2010-09-09 16:41:13

+0

代码> 127的ASCII字符在UTF-8方面无效。 MultiByte代表UTF-8。这不行,我告诉你,试试吧。可能是你(或我:))误解了这个问题。 – Andrey 2010-09-09 16:42:39

1

我们假设神秘的Exntended ASCII只是Latin1。然后使用面膜从维基百科:

110Y yyxx 10XX XXXX

因为你只有00..FF那么你必须:1100 00xx 10xx xxxx

转换算法将是继中,如果字符代码是< 127然后就放弃它原样,如果是> 127,那么你做0xC0 | ((x & 0xC0) >> 24)进入第一个字节,第二个是((x & 0x3F) | 0x80)

+0

你在说什么“来自维基百科的面具”?您还没有生成有效的UTF-8; UTF-8在其中没有任何零字节。 – 2010-09-09 16:58:59