[英]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.