programing

문자열이 Unicode인지 ASCII인지 확인하려면 어떻게 해야 하나요?

javaba 2022. 11. 26. 21:46
반응형

문자열이 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는 바이트의 시퀀스일 뿐입니다.파이썬unicodetype은 텍스트를 안전하게 저장하는 방법입니다.더 자세히 알고 싶다면 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인지 확인하는 방법

요.decodeUnicodeDecodeError: 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 에서는, 다음의 어느쪽인가를 말하는 것은 그다지 공평하지 않습니다.

  • strs: 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

반응형