我有以下用阿拉伯语写的文本,当我调用text.characters.count
时,它返回298个字符而不是实数300。
文本:
并提到在文本之前和之后没有周围的空白。utf8.characters.count
也返回相同的错误数字。
给定这样的字符串,如何获得正确的字符数?
最佳答案
获得unicode scalar计数应该可以给您预期的结果:
let myString = "هنالك العديد من الأنواع المتوفرة لنصوص لوريم إيبسوم، ولكن الغالبية تم تعديلها بشكل ما عبر إدخال بعض النوادر أو الكلمات العشوائية إلى النص. إن كنت تريد أن تستخدم نص لوريم إيبسوم ما، عليك أن تتحقق أولاً أن ليس هناك أي كلمات أو عبارات محرجة أو غير لائقة مخبأة في هذا النص. بينما تعمل جميع مولّدات نصوص ا"
myString.unicodeScalars.count // 300
如Swift - Strings and Characters中所述:
但是
不管您期望得到什么结果,将“Fat-ha”,“damma”,“kasra”之类的“harakat”(分隔符)视为单独的字符可能会导致错误的结果。
例如:如果您尝试检查“أولاً”字的数量,您会注意到:
let myString = "أولاً"
myString.characters.count // 4
myString.unicodeScalars.count // 5
如您所见,除非您要计算其unicodeScalars值,否则TanweenFat-ha字符不会被算作分隔字符。
正如您所提到的,charactercountonline.com似乎将“harakat”(分隔符)视为独立字符,这对于非阿拉伯语人士来说应该是合乎逻辑的,但这将是错误的计数。
备注对于非阿拉伯语观看者:
“أولاً”一词包含一个小数分隔符,称为“Fat-hatan”或“Tanween Fat-h”,不应将此分隔符视为涉及阿拉伯语语法的分隔字符;使用它的目的是指示单词的拼写方式。对于说阿拉伯语的人来说,这种逻辑应该是显而易见的,“أولاً”一词包含四个字符,而与计数相关的则不是计算机!