Dizginin yalnızca Python'da ASCII karakterlerini içerdiğini nasıl kontrol ederim? Böyle bir şey Ruby'nin ascii_only?
ben dosyadan okunan dize özel veriBir dizginin yalnızca ASCII karakterleri içerdiğini kontrol edin.
cevap
>>> all(ord(char) < 128 for char in 'string')
>>> True
>>> all(ord(char) < 128 for char in 'строка')
>>> False
Başka bir sürümü ascii olup olmadığını söylemek mümkün istiyorum
: Eğer unicode dizeleri varsa
>>> def is_ascii(text):
if isinstance(text, unicode):
try:
text.encode('ascii')
except UnicodeEncodeError:
return False
else:
try:
text.decode('ascii')
except UnicodeDecodeError:
return False
return True
...
>>> is_ascii('text')
>>> True
>>> is_ascii(u'text')
>>> True
>>> is_ascii(u'text-строка')
>>> False
>>> is_ascii('text-строка')
>>> False
>>> is_ascii(u'text-строка'.encode('utf-8'))
>>> False
kullanabilirsiniz işlevini kodlayın ve sonra özel durumu yakalayın: ( Eğer bayt varvarsa, Chardet modülü almak ve kodlama kontrol edebilirsiniz:
import chardet
# Get the encoding
enc = chardet.detect(mystring)['encoding']
'da uygulanmaktadır. "Exception" sınıfını değil, beklediğiniz 'UnicodeDecodeError 'hatasını yakalamalısınız. Hangi nedenle olursa olsun 'chardet.detect' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'tuşuna sahip değilse ya da' 'mistring'''' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''''''. – Carpetsmoker
senin sorunun geçici denemek ve belirli kodlamasında dize kodlamak için olacaktır. Örneğin
:
'H€llø'.encode('utf-8')
Bu, aşağıdaki hata atar:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 1: ordinal not in range(128)
Şimdi dize sadece ASCII karakterleri içermiyordu belirlemek için "UnicodeDecodeError" yakalayabilirsiniz.
try:
'H€llø'.encode('utf-8')
except UnicodeDecodeError:
print 'This string contains more than just the ASCII characters.'
Bu yalnızca "ascii" ile kodlarsanız çalışır. – Nimitz14
Sadece ascii karakterlerini kontrol etmek için normal ifadeyi seçebilirsiniz.
>>> OnlyAscii = lambda s: re.match('^[\x00-\x7F]+$', s) != None
>>> OnlyAscii('string')
True
>>> OnlyAscii('Tannh‰user')
False
- 1. Yalnızca ASCII olmayan karakterleri silmeye çalışıyorum sadece
- 2. Javascript/jQuery, dizginin isteğe bağlı sözcüklerden biriyle mi yoksa kelime mi içerdiğini kontrol edin
- 3. Bir dizginin Javascript kullanılarak başlatılıp başlatılmadığını kontrol edin
- 4. Bir dizginin yalnızca Python'daki harfleri içerip içermediğini nasıl kontrol edebilirim?
- 5. Karakterleri ASCII koduna dönüştürme
- 6. Dizginin sayı ile bitip bitmediğini kontrol edin ve doğruysa, sayı
- 7. Belirli bir dizginin R
- 8. yalnızca subversion olarak değiştirilmiş dosyaların nasıl kontrol edileceğini kontrol edin
- 9. yasemin: bir dizinin belirtilen özelliklere sahip bir öğe içerdiğini kontrol edin
- 10. Ascii olmayan karakterleri denetlemek için Postgresql kısıtlaması
- 11. Değişkenler listesinde yalnızca bir değişkenin ayarlanmış olup olmadığını kontrol edin
- 12. Dizinin yalnızca bir anahtar/değer içerip içermediğini kontrol edin
- 13. Taranacak ASCII olmayan karakterleri girme ("% s")
- 14. jQuery $ .inArray ASCII karakterleri ile çalışmıyor
- 15. Yazdırma karakterleri ve onların ASCII kodunu C
- 16. Unicode ve Ascii karakterleri aynı mıdır?
- 17. İletki - bir öğenin metin içerdiğini nasıl kontrol edeceğiniz
- 18. C++ 'da bir yapının iyi hizalanmış olduğunu veya boşluklar içerdiğini kontrol edin
- 19. ASCII
- 20. Python'daki bir dizgeden yalnızca karakterleri ayıklama
- 21. Olayın bir insan tarafından tetiklendiğini kontrol edin
- 22. Geçerli bir tarih kontrol edin
- 23. Dize bir sayı olup olmadığını kontrol edin
- 24. JavaScript'de tarih kontrol edin
- 25. Precompile'da ARC'yi kontrol edin
- 26. Python - rutini kontrol edin
- 27. $ null hızda kontrol edin
- 28. Dizin boşsa kontrol edin
- 29. ASP - TextBox yalnızca karakterleri kabul eder [UniCode] - C#
- 30. Dizenin SHA1'i her zaman ASCII karakterleri döndürüyor mu?
Ben bu her zaman bütün bir liste oluşturmak düşünüyorum:
[\x00-\x7F]
tek ASCII karakter eşleşebilir? Daha fazla bellek kullanır ve ilk karakter> 0x80 karakteriyse, daha yavaş olacaktır, çünkü tüm dizgede yineleme yapmaya devam eder (bu, * en * uygulamalarında çok fazla önemli değildir, ancak * bazılarında *). – Carpetsmoker@Carpetsmoker> Bence bu her zaman bir liste oluşturacak mı?
warvariuc
Tamam, teşekkürler ;-) – Carpetsmoker