문자열이 Unicode인지 ASCII인지 확인하려면 어떻게 해야 하나요?
문자열에 어떤 인코딩이 있는지 알아보려면 Python에서 무엇을 해야 합니까?
파이썬 3에서는 모든 문자열이 유니코드 문자의 시퀀스입니다. 게 요.bytes
bytesraw를 .
이 Python 2의 이 될 수 .str
타입 「」의unicode
을 사용하다
def whatisthis(s):
if isinstance(s, str):
print "ordinary string"
elif isinstance(s, unicode):
print "unicode string"
else:
print "not a string"
이는 "유니코드 또는 ASCII"를 구분하지 않고 Python 유형만 구분합니다.Unicode 문자열은 ASCII 범위의 문자로만 구성될 수 있으며, 바이테스트링에는 ASCII, 인코딩된 Unicode 또는 텍스트 이외의 데이터가 포함될 수 있습니다.
개체가 유니코드 문자열인지 바이트 문자열인지 확인하는 방법
하시면 됩니다.type
★★★★★★★★★★★★★★★★★」isinstance
.
Python 2의 경우:
>>> type(u'abc') # Python 2 unicode string literal
<type 'unicode'>
>>> type('abc') # Python 2 byte string literal
<type 'str'>
2, Python 2의 str
는 바이트의 시퀀스일 뿐입니다.파이썬unicode
type은 텍스트를 안전하게 저장하는 방법입니다.더 자세히 알고 싶다면 http://farmdev.com/talks/unicode/을 추천합니다.
Python 3의 경우:
>>> type('abc') # Python 3 unicode string literal
<class 'str'>
>>> type(b'abc') # Python 3 byte string literal
<class 'bytes'>
3, Python 3의 경우str
의 Python 2의 Python 2와 .unicode
텍스트 저장에 사용됩니다.라고 했죠?str
는 Python 2라고 .bytes
파이썬 3번
바이트 문자열이 유효한 utf-8인지 ASCII인지 확인하는 방법
요.decode
UnicodeDecodeError: UnicodeDecodeError: UnicodeDecodeError: UnicodeDecodeError: UnicodeDecodeError.
>>> u_umlaut = b'\xc3\x9c' # UTF-8 representation of the letter 'Ü'
>>> u_umlaut.decode('utf-8')
u'\xdc'
>>> u_umlaut.decode('ascii')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
python 3.x 에서는 모든 문자열은 Unicode 문자의 시퀀스입니다.또, str(기본적으로는 Unicode 문자열을 의미)에 대한 isinstance 체크를 실시하면 충분합니다.
isinstance(x, str)
python 2.x에 대해서는 대부분 체크가 두 개 있는 if 문을 사용하고 있는 것 같습니다.하나는 str, 다른 하나는 unicode입니다.
string-like 객체가 모두1개의 스테이트먼트에 있는지 여부를 확인하려면 다음 절차를 수행합니다.
isinstance(x, basestring)
Unicode는 인코딩이 아닙니다.Kumar McMillan을 인용하면:
ASCII, UTF-8 및 기타 바이트 문자열이 "텍스트"일 경우...
Unicode는 "text-ness"입니다.
그것은 텍스트의 추상적인 형태이다
McMillan의 Unicode를 읽어보세요 PyCon 2008의 완전 디미스테이트한 Python에서는 Stack Overflow에 대한 대부분의 관련 답변보다 훨씬 더 잘 설명됩니다.
만약 당신의 코드가 Python 2와 Python 3 둘 다와 호환되어야 한다면, 당신은 다음과 같은 것들을 직접적으로 사용할 수 없습니다.isinstance(s,bytes)
★★★★★★★★★★★★★★★★★」isinstance(s,unicode)
. try/except python은 try/except python을 사용합니다.bytes
2 및 Python 2에는 않습니다.unicode
파이썬 3의 약칭.
몇 가지 추악한 회피책이 있습니다.매우 추악한 것은 활자 자체를 비교하는 것이 아니라 활자의 이름을 비교하는 것입니다.다음은 예를 제시하겠습니다.
# convert bytes (python 3) or unicode (python 2) to str
if str(type(s)) == "<class 'bytes'>":
# only possible in Python 3
s = s.decode('ascii') # or s = str(s)[2:-1]
elif str(type(s)) == "<type 'unicode'>":
# only possible in Python 2
s = str(s)
Python 버전 번호를 확인하는 것이 약간 덜 불쾌한 해결책입니다. 예를 들어 다음과 같습니다.
if sys.version_info >= (3,0,0):
# for Python 3
if isinstance(s, bytes):
s = s.decode('ascii') # or s = str(s)[2:-1]
else:
# for Python 2
if isinstance(s, unicode):
s = str(s)
둘 다 비조화적이고 대부분 더 나은 방법이 있을 겁니다
용도:
import six
if isinstance(obj, six.text_type)
6개의 라이브러리 내에서는 다음과 같이 표현됩니다.
if PY3:
string_types = str,
else:
string_types = basestring,
Python 3 에서는, 다음의 어느쪽인가를 말하는 것은 그다지 공평하지 않습니다.
str
s: UTFx가 되다(UTF8)str
는 Unicode(Unicode) Unicode입니다.str
는, Unicode (Unicode 문자)의입니다.
이 python python str
은 ( 포인트의 그중.type ('유니코드'), Unicode 코드 포인트, "유니코드"의 "유니코드"의 "유니코드"의 "유니코드"의 "유니코드"의 "유니코드"의 "유니코드"의 "유니코드"의 "유니코드"에 매핑됩니다.
Python 3에서도, 이 질문에 대답하는 것은 상상하는 것처럼 간단하지 않습니다.
ASCII 호환 문자열을 테스트하는 확실한 방법은 부호화를 시도하는 것입니다.
"Hello there!".encode("ascii")
#>>> b'Hello there!'
"Hello there... ☃!".encode("ascii")
#>>> Traceback (most recent call last):
#>>> File "", line 4, in <module>
#>>> UnicodeEncodeError: 'ascii' codec can't encode character '\u2603' in position 15: ordinal not in range(128)
에러에 의해서, 케이스가 구별됩니다.
Python 3에는 잘못된 Unicode 코드 포인트를 포함하는 문자열도 있습니다.
"Hello there!".encode("utf8")
#>>> b'Hello there!'
"\udcc3".encode("utf8")
#>>> Traceback (most recent call last):
#>>> File "", line 19, in <module>
#>>> UnicodeEncodeError: 'utf-8' codec can't encode character '\udcc3' in position 0: surrogates not allowed
동일한 방법으로 구분합니다.
이것은 다른 사용자에게 도움이 될 수 있습니다.저는 변수 문자열 타입 테스트를 시작했지만 어플리케이션에서는 단순히 utf-8로 s를 반환하는 것이 더 의미가 있었습니다.return_utf를 호출하는 프로세스는 처리 대상을 인식하고 문자열을 적절하게 처리할 수 있습니다.이 코드는 완전하지는 않지만 버전 테스트나 6개의 Import 없이 Python 버전에 의존하지 않도록 할 것입니다.아래 샘플 코드를 개선하여 다른 사람에게 도움이 되도록 코멘트 부탁드립니다.
def return_utf(s):
if isinstance(s, str):
return s.encode('utf-8')
if isinstance(s, (int, float, complex)):
return str(s).encode('utf-8')
try:
return s.encode('utf-8')
except TypeError:
try:
return str(s).encode('utf-8')
except AttributeError:
return s
except AttributeError:
return s
return s # assume it was already utf-8
범용 인코딩 디텍터를 사용할 수도 있지만 문자열 "abc" 인코딩을 알 수 없기 때문에 실제 인코딩이 아닌 최상의 추측만 제공된다는 점에 유의하십시오.HTTP 프로토콜은 이를 위해 Content-Type 헤더를 사용합니다.
이 Python-3와 같은 .b='\x7f\x00\x00\x01'
★★★★★★★★★★★★★★★★★」b='127.0.0.1'
.
def get_str(value):
str_value = str(value)
if str_value.isprintable():
return str_value
return '.'.join(['%d' % x for x in value])
날 위해 일했고, 누군가 필요한 사람을 위해 일하길 바란다.
py2/py3 호환성을 위해 간단히 사용
import six if isinstance(obj, six.text_type)
가지 은 '아까보다'가 '아까보다'unicode
을 사용하다만약 그렇다면, 당신은 Python 2에 있고 당신의 문자열은 문자열이 됩니다.이 「」에 것을 합니다.unicode
다음을 수행할 수 있습니다.
import builtins
i = 'cats'
if 'unicode' in dir(builtins): # True in python 2, False in 3
i = unicode(i)
언급URL : https://stackoverflow.com/questions/4987327/how-do-i-check-if-a-string-is-unicode-or-ascii
'programing' 카테고리의 다른 글
PHP 스크립트의 일반 "Kilted" 오류 (0) | 2022.11.26 |
---|---|
Python의 정적 클래스 변수 및 메서드 (0) | 2022.11.26 |
VARCHAR 필드의 문자열 발생 횟수를 카운트하시겠습니까? (0) | 2022.11.26 |
MariaDB가 스킵 네트워킹으로 구성되었지만 포트 3306이 열려 있습니다. (0) | 2022.11.26 |
MariaDB 클라이언트가 utf8mb4를 사용하도록 강제 설정 (0) | 2022.11.26 |