当前位置: 首页 > 编程语言 > C#

PythonC#-Python和C#上的Unicode字符不同Share

时间:2023-04-10 20:57:52 C#

PythonC#-Python和C#上的Unicode字符不同我在处理文本文件时遇到问题。我发现字符的Unicode表示在Python和C#上是不同的。在特定索引上使用Python3.5.2打开文件时,unicode字符为:withopen('file.txt','r',encoding='utf-8')asf:text=f.read()text[189]//输出:u"U0001F464"当在同一索引上使用C#打开文件时,此字符由两个字符表示:stringtext=File.ReadAllText("file.txt",Encoding.UTF8);Console.WriteLine(((int)text[189]).ToString("X4"));//输出:"D83D"stringtext=File.ReadAllText("file.txt",Encoding.UTF8);Console.WriteLine(((int)text[190]).ToString("X4"));//输出:“DC64”所以在Python上这个字符在索引189上,在C#上它在189和190上。在文件格式网站上引用这个字符:http://www.fileformat.info/info/unicode/char/1F464/index.htm如您所见,该字符的表示具有不同的长度。在C#/C/C++/Java“uD83DuDC64”和pythonu“U0001F464”上。文本中有问题的部分:👤loginIsthereawaytousethesameunicoderepresentationinPython3.5andC#?编辑:下载发生此错误的原始文件:https://ufile.io/pr5v6您无法修复它。它是语言的Unicode实现中固有的。当读取文件并解码为Unicode时,C#和Java存储内部编码为UTF-16的Unicode字符串。BasicMultilingualPlane(BMP、U+0000到U+FFFF)之外的代码点使用代理项(两个词)来表示Unicode代码点。您可以将Unicode代码点视为两个词这一事实是一种有漏洞的抽象。Python3.3+隐藏了这种抽象。它在内部使用1字节、2字节或4字节编码适当地表示Unicode字符串,但只向用户显示Unicode代码点。Python2(与C#和Java相同的易受攻击的抽象):Python2.7.13(v2.7.13:a06454b1afa1,Dec172016,20:53:40)[MSCv.150064bit(AMD64)]onwin32Type"help"、“版权”、“出处”或“许可”以获取更多信息。>>>len(u'U0001F464')2>>>u'U0001F464'[0]u'ud83d'>>>u'U0001F464'[1]u'udc64'Python3.3+:Python3.6.1(v3.6.1:69c0db5,Mar212017,18:41:36)[MSCv.190064位(AMD64)]onwin32键入“help”、“copyright”、“credits”或“license”以获取更多信息。>>>len(u'U0001F464')1>>>u'U0001F464'[0]'👤'在内部,Python3使用UTF-32来存储包含非BMP代码点的Unicode字符串,并使用四个字节来存储U+1F464。以上就是C#学习教程:PythonC#-Python和C#上的Unicode字符不一样所有内容分享。如果对大家有用,需要了解更多C#学习教程,希望大家多多关注——本文来自网络合集,不代表立场,如涉及侵权,请点击右转联系管理员删除。如需转载请注明出处: