Python C# – Python和C#上的Unicode字符不一样
我在处理文本文件时遇到问题。 我发现Python
和C#
上的字符Unicode表示是不同的。
在特定索引上使用Python 3.5.2
打开文件时,unicode字符为:
with open('file.txt', 'r', encoding = 'utf-8') as f: text = f.read() text[189] // Output: u"U0001F464"
在同一索引上使用C#
打开文件时,此char由两个字符表示:
string text = File.ReadAllText("file.txt", Encoding.UTF8); Console.WriteLine(((int)text[189]).ToString("X4")); // Output: "D83D" string text = File.ReadAllText("file.txt", Encoding.UTF8); Console.WriteLine(((int)text[190]).ToString("X4")); // Output: "DC64"
所以在python上,这个char在索引189上,在c#上在189和190上。
在fileformat网站上参考这个字符:
https://www.fileformat.info/info/unicode/char/1F464/index.htm
正如你在那里看到的那样,这个字符的表示有不同的长度。 在C#/ C / C ++ / Java“ uD83D uDC64”和python u“ U0001F464”上。
文本中有问题的部分:
👤登录
有没有办法在Python 3.5和C#中使用相同的unicode表示?
编辑:
下载发生此错误的原始文件: https : //ufile.io/pr5v6
你无法解决它。 它是语言的Unicode实现中固有的。
在读取文件并解码为Unicode时,C#和Java存储内部编码为UTF-16的 Unicode字符串。 基本多语言平面 (BMP,U + 0000到U + FFFF)之外的代码点使用代理 (两个字)来表示Unicode代码点。 您可以将Unicode代码点视为两个单词的事实是漏洞抽象 。
Python 3.3+隐藏了这种抽象。 它根据需要在内部使用1字节,2字节或4字节编码来表示Unicode字符串,但仅向用户显示Unicode代码点。
Python 2(与C#和Java相同的漏洞抽象):
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> len(u'U0001F464') 2 >>> u'U0001F464'[0] u'ud83d' >>> u'U0001F464'[1] u'udc64'
Python 3.3+:
Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> len(u'U0001F464') 1 >>> u'U0001F464'[0] '👤'
在内部,Python 3使用UTF-32来存储包含非BMP代码点的Unicode字符串,并使用四个字节来存储U + 1F464。
上述就是C#学习教程:Python C# – Python和C#上的Unicode字符不一样分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1044579.html