繁体   English   中英

WChar如何与Unicode和ASCII相关

[英]How does WChar relate to Unicode and ASCII

我将要表明我对编码的工作方式和不同的字符串格式的完全无知。

我传递一个字符串到一个编译器(微软,因为它发生了他们的飞行模拟器)。 该字符串作为XML文档的一部分传递,该文档用作编译器的源。 这是使用标准NET字符串创建的。 我不需要专门指定任何类型的编码或设置,因为XML只是文本。

字符串只是一个字符集合。 这是一个给出错误的示例:

ARG,AFL,AMX,ACA,DAH,CCA,AEL,AGN,MAU,SEY,TSC,AZA,AAL,ANA,BBC,CPA,CAL,COA,CUB,DAL,UGX,ELY,UAE,ERT,ETH, EEZ,GHA,IRA,JAL,NWA,KAL,KAC,LAN,LDI,MAS,MEA,PIA,QTR,RAM,RJA,SVA,SIA,SWR,ROT,THA,THY,AUI,UAL,USA,ACA, TAR,UZB,IYE,QFA

如果我使用我的C#托管程序创建字符串,则没有问题。 但是,这个字符串来自一个c ++程序,它可以使用不同于MS的编译器创建编译文件

MS编译器不喜欢该字符串。 它抛出两个错误:

内部编译器错误:#C2621:无法转换WChar字符串! 内部编译器错误:#C2029:无法从UNICODE转换属性值!

遗憾的是,编译器的错误没有任何有用的文档。 我们只是看到了我们看到的最好的东西!

我见过这种类型的其他错误,但这些错误包含我可以捕获和删除的隐藏字符和控制字符。

在这种情况下,我将字符串看作Char []并且看不到任何异常。 只有我所期待的。 没有高于ascii限制127的值,也没有控制字符。

我知道WChar是C ++理解的东西(但我不知道),Unicode是字符的双字节表示,ASCII是单字节表示。

我想做两件事 - 首先确定一个字符串,如果传递给编译器将失败,第二个修复字符串。 我假设编译器期望ASCII。

编辑

我说的是一个不实之词 - 事实上我确实使用了编码。 我检查了用于将字节数组转换为字符串的代码。

public static string Bytes2String(byte[] bytes, int start, int length) {
            string temp = Encoding.Defaut.GetString(bytes, start, length);

        }

我意识到Default可能是一个问题,但将其更改为ASCII没有任何区别。 我开始相信错误信息不是它看起来的样子。

看起来你正在使用一个字节数组,并使用Encoding.Default返回的Encoding.Default将其转换为字符串。

建议您不要这样做( 在Microsoft文档中 )。

您需要确定在C ++程序中使用什么编码来生成字节数组,并使用相同的(或兼容的)在C#代码中将字节数组再次转换回字符串。 例如,如果字节数组使用ASCII编码,您可以使用:

System.Text.ASCIIEncoding.GetString(bytes, start, length);

要么

System.Text.UTF8Encoding.GetString(bytes, start, length);

PS我希望乔尔没有抓住你 ;)

我必须坦白 ,编译器错误无关与字符串的编码格式。 事实证明,它是错误的字符串的长度。 根据示例,有许多以逗号分隔的条目。 如果条目计数超过50,编译器会抛出相当不友好的消息。

不过感谢大家的帮助 - 它在我的脑海中提出了编码问题,现在我将更仔细地看一下

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM