Current Path: > > lib64 > python3.6 > encodings
Operation : Linux premium107.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64 Software : Apache Server IP : 198.54.126.246 | Your IP: 216.73.216.181 Domains : 1034 Domain(s) Permission : [ 0755 ]
| Name | Type | Size | Last Modified | Actions |
|---|---|---|---|---|
| __pycache__ | Directory | - | - | |
| __init__.py | File | 5642 bytes | December 23 2018 21:37:14. | |
| aliases.py | File | 15577 bytes | December 23 2018 21:37:14. | |
| ascii.py | File | 1248 bytes | December 23 2018 21:37:14. | |
| base64_codec.py | File | 1533 bytes | December 23 2018 21:37:14. | |
| big5.py | File | 1019 bytes | December 23 2018 21:37:14. | |
| big5hkscs.py | File | 1039 bytes | December 23 2018 21:37:14. | |
| bz2_codec.py | File | 2249 bytes | December 23 2018 21:37:14. | |
| charmap.py | File | 2084 bytes | December 23 2018 21:37:14. | |
| cp037.py | File | 13121 bytes | December 23 2018 21:37:14. | |
| cp1006.py | File | 13568 bytes | December 23 2018 21:37:14. | |
| cp1026.py | File | 13113 bytes | December 23 2018 21:37:14. | |
| cp1125.py | File | 34597 bytes | December 23 2018 21:37:14. | |
| cp1140.py | File | 13105 bytes | December 23 2018 21:37:14. | |
| cp1250.py | File | 13686 bytes | December 23 2018 21:37:14. | |
| cp1251.py | File | 13361 bytes | December 23 2018 21:37:14. | |
| cp1252.py | File | 13511 bytes | December 23 2018 21:37:14. | |
| cp1253.py | File | 13094 bytes | December 23 2018 21:37:14. | |
| cp1254.py | File | 13502 bytes | December 23 2018 21:37:14. | |
| cp1255.py | File | 12466 bytes | December 23 2018 21:37:14. | |
| cp1256.py | File | 12814 bytes | December 23 2018 21:37:14. | |
| cp1257.py | File | 13374 bytes | December 23 2018 21:37:14. | |
| cp1258.py | File | 13364 bytes | December 23 2018 21:37:14. | |
| cp273.py | File | 14132 bytes | December 23 2018 21:37:14. | |
| cp424.py | File | 12055 bytes | December 23 2018 21:37:14. | |
| cp437.py | File | 34564 bytes | December 23 2018 21:37:14. | |
| cp500.py | File | 13121 bytes | December 23 2018 21:37:14. | |
| cp65001.py | File | 1106 bytes | December 23 2018 21:37:14. | |
| cp720.py | File | 13686 bytes | December 23 2018 21:37:14. | |
| cp737.py | File | 34681 bytes | December 23 2018 21:37:14. | |
| cp775.py | File | 34476 bytes | December 23 2018 21:37:14. | |
| cp850.py | File | 34105 bytes | December 23 2018 21:37:14. | |
| cp852.py | File | 35002 bytes | December 23 2018 21:37:14. | |
| cp855.py | File | 33850 bytes | December 23 2018 21:37:14. | |
| cp856.py | File | 12423 bytes | December 23 2018 21:37:14. | |
| cp857.py | File | 33908 bytes | December 23 2018 21:37:14. | |
| cp858.py | File | 34015 bytes | December 23 2018 21:37:14. | |
| cp860.py | File | 34681 bytes | December 23 2018 21:37:14. | |
| cp861.py | File | 34633 bytes | December 23 2018 21:37:14. | |
| cp862.py | File | 33370 bytes | December 23 2018 21:37:14. | |
| cp863.py | File | 34252 bytes | December 23 2018 21:37:14. | |
| cp864.py | File | 33663 bytes | December 23 2018 21:37:14. | |
| cp865.py | File | 34618 bytes | December 23 2018 21:37:14. | |
| cp866.py | File | 34396 bytes | December 23 2018 21:37:14. | |
| cp869.py | File | 32965 bytes | December 23 2018 21:37:14. | |
| cp874.py | File | 12595 bytes | December 23 2018 21:37:14. | |
| cp875.py | File | 12854 bytes | December 23 2018 21:37:14. | |
| cp932.py | File | 1023 bytes | December 23 2018 21:37:14. | |
| cp949.py | File | 1023 bytes | December 23 2018 21:37:14. | |
| cp950.py | File | 1023 bytes | December 23 2018 21:37:14. | |
| euc_jis_2004.py | File | 1051 bytes | December 23 2018 21:37:14. | |
| euc_jisx0213.py | File | 1051 bytes | December 23 2018 21:37:14. | |
| euc_jp.py | File | 1027 bytes | December 23 2018 21:37:14. | |
| euc_kr.py | File | 1027 bytes | December 23 2018 21:37:14. | |
| gb18030.py | File | 1031 bytes | December 23 2018 21:37:14. | |
| gb2312.py | File | 1027 bytes | December 23 2018 21:37:14. | |
| gbk.py | File | 1015 bytes | December 23 2018 21:37:14. | |
| hex_codec.py | File | 1508 bytes | December 23 2018 21:37:14. | |
| hp_roman8.py | File | 13475 bytes | December 23 2018 21:37:14. | |
| hz.py | File | 1011 bytes | December 23 2018 21:37:14. | |
| idna.py | File | 9098 bytes | February 05 2026 20:00:12. | |
| iso2022_jp.py | File | 1053 bytes | December 23 2018 21:37:14. | |
| iso2022_jp_1.py | File | 1061 bytes | December 23 2018 21:37:14. | |
| iso2022_jp_2.py | File | 1061 bytes | December 23 2018 21:37:14. | |
| iso2022_jp_2004.py | File | 1073 bytes | December 23 2018 21:37:14. | |
| iso2022_jp_3.py | File | 1061 bytes | December 23 2018 21:37:14. | |
| iso2022_jp_ext.py | File | 1069 bytes | December 23 2018 21:37:14. | |
| iso2022_kr.py | File | 1053 bytes | December 23 2018 21:37:14. | |
| iso8859_1.py | File | 13176 bytes | December 23 2018 21:37:14. | |
| iso8859_10.py | File | 13589 bytes | December 23 2018 21:37:14. | |
| iso8859_11.py | File | 12335 bytes | December 23 2018 21:37:14. | |
| iso8859_13.py | File | 13271 bytes | December 23 2018 21:37:14. | |
| iso8859_14.py | File | 13652 bytes | December 23 2018 21:37:14. | |
| iso8859_15.py | File | 13212 bytes | December 23 2018 21:37:14. | |
| iso8859_16.py | File | 13557 bytes | December 23 2018 21:37:14. | |
| iso8859_2.py | File | 13404 bytes | December 23 2018 21:37:14. | |
| iso8859_3.py | File | 13089 bytes | December 23 2018 21:37:14. | |
| iso8859_4.py | File | 13376 bytes | December 23 2018 21:37:14. | |
| iso8859_5.py | File | 13015 bytes | December 23 2018 21:37:14. | |
| iso8859_6.py | File | 10833 bytes | December 23 2018 21:37:14. | |
| iso8859_7.py | File | 12844 bytes | December 23 2018 21:37:14. | |
| iso8859_8.py | File | 11036 bytes | December 23 2018 21:37:14. | |
| iso8859_9.py | File | 13156 bytes | December 23 2018 21:37:14. | |
| johab.py | File | 1023 bytes | December 23 2018 21:37:14. | |
| koi8_r.py | File | 13779 bytes | December 23 2018 21:37:14. | |
| koi8_t.py | File | 13193 bytes | December 23 2018 21:37:14. | |
| koi8_u.py | File | 13762 bytes | December 23 2018 21:37:14. | |
| kz1048.py | File | 13723 bytes | December 23 2018 21:37:14. | |
| latin_1.py | File | 1264 bytes | December 23 2018 21:37:14. | |
| mac_arabic.py | File | 36467 bytes | December 23 2018 21:37:14. | |
| mac_centeuro.py | File | 14102 bytes | December 23 2018 21:37:14. | |
| mac_croatian.py | File | 13633 bytes | December 23 2018 21:37:14. | |
| mac_cyrillic.py | File | 13454 bytes | December 23 2018 21:37:14. | |
| mac_farsi.py | File | 15170 bytes | December 23 2018 21:37:14. | |
| mac_greek.py | File | 13721 bytes | December 23 2018 21:37:14. | |
| mac_iceland.py | File | 13498 bytes | December 23 2018 21:37:14. | |
| mac_latin2.py | File | 14118 bytes | December 23 2018 21:37:14. | |
| mac_roman.py | File | 13480 bytes | December 23 2018 21:37:14. | |
| mac_romanian.py | File | 13661 bytes | December 23 2018 21:37:14. | |
| mac_turkish.py | File | 13513 bytes | December 23 2018 21:37:14. | |
| mbcs.py | File | 1211 bytes | December 23 2018 21:37:14. | |
| oem.py | File | 1019 bytes | December 23 2018 21:37:14. | |
| palmos.py | File | 13519 bytes | December 23 2018 21:37:14. | |
| ptcp154.py | File | 14015 bytes | December 23 2018 21:37:14. | |
| punycode.py | File | 6881 bytes | December 23 2018 21:37:14. | |
| quopri_codec.py | File | 1525 bytes | December 23 2018 21:37:14. | |
| raw_unicode_escape.py | File | 1208 bytes | December 23 2018 21:37:14. | |
| rot_13.py | File | 2438 bytes | December 23 2018 21:37:14. | |
| shift_jis.py | File | 1039 bytes | December 23 2018 21:37:14. | |
| shift_jis_2004.py | File | 1059 bytes | December 23 2018 21:37:14. | |
| shift_jisx0213.py | File | 1059 bytes | December 23 2018 21:37:14. | |
| tis_620.py | File | 12300 bytes | December 23 2018 21:37:14. | |
| undefined.py | File | 1299 bytes | December 23 2018 21:37:14. | |
| unicode_escape.py | File | 1184 bytes | December 23 2018 21:37:14. | |
| unicode_internal.py | File | 1196 bytes | December 23 2018 21:37:14. | |
| utf_16.py | File | 5236 bytes | December 23 2018 21:37:14. | |
| utf_16_be.py | File | 1037 bytes | December 23 2018 21:37:14. | |
| utf_16_le.py | File | 1037 bytes | December 23 2018 21:37:14. | |
| utf_32.py | File | 5129 bytes | December 23 2018 21:37:14. | |
| utf_32_be.py | File | 930 bytes | December 23 2018 21:37:14. | |
| utf_32_le.py | File | 930 bytes | December 23 2018 21:37:14. | |
| utf_7.py | File | 946 bytes | December 23 2018 21:37:14. | |
| utf_8.py | File | 1005 bytes | December 23 2018 21:37:14. | |
| utf_8_sig.py | File | 4133 bytes | December 23 2018 21:37:14. | |
| uu_codec.py | File | 2721 bytes | December 23 2018 21:37:14. | |
| zlib_codec.py | File | 2204 bytes | December 23 2018 21:37:14. |
# This module implements the RFCs 3490 (IDNA) and 3491 (Nameprep)
import stringprep, re, codecs
from unicodedata import ucd_3_2_0 as unicodedata
# IDNA section 3.1
dots = re.compile("[\u002E\u3002\uFF0E\uFF61]")
# IDNA section 5
ace_prefix = b"xn--"
sace_prefix = "xn--"
# This assumes query strings, so AllowUnassigned is true
def nameprep(label):
# Map
newlabel = []
for c in label:
if stringprep.in_table_b1(c):
# Map to nothing
continue
newlabel.append(stringprep.map_table_b2(c))
label = "".join(newlabel)
# Normalize
label = unicodedata.normalize("NFKC", label)
# Prohibit
for c in label:
if stringprep.in_table_c12(c) or \
stringprep.in_table_c22(c) or \
stringprep.in_table_c3(c) or \
stringprep.in_table_c4(c) or \
stringprep.in_table_c5(c) or \
stringprep.in_table_c6(c) or \
stringprep.in_table_c7(c) or \
stringprep.in_table_c8(c) or \
stringprep.in_table_c9(c):
raise UnicodeError("Invalid character %r" % c)
# Check bidi
RandAL = [stringprep.in_table_d1(x) for x in label]
if any(RandAL):
# There is a RandAL char in the string. Must perform further
# tests:
# 1) The characters in section 5.8 MUST be prohibited.
# This is table C.8, which was already checked
# 2) If a string contains any RandALCat character, the string
# MUST NOT contain any LCat character.
if any(stringprep.in_table_d2(x) for x in label):
raise UnicodeError("Violation of BIDI requirement 2")
# 3) If a string contains any RandALCat character, a
# RandALCat character MUST be the first character of the
# string, and a RandALCat character MUST be the last
# character of the string.
if not RandAL[0] or not RandAL[-1]:
raise UnicodeError("Violation of BIDI requirement 3")
return label
def ToASCII(label):
try:
# Step 1: try ASCII
label = label.encode("ascii")
except UnicodeError:
pass
else:
# Skip to step 3: UseSTD3ASCIIRules is false, so
# Skip to step 8.
if 0 < len(label) < 64:
return label
raise UnicodeError("label empty or too long")
# Step 2: nameprep
label = nameprep(label)
# Step 3: UseSTD3ASCIIRules is false
# Step 4: try ASCII
try:
label = label.encode("ascii")
except UnicodeError:
pass
else:
# Skip to step 8.
if 0 < len(label) < 64:
return label
raise UnicodeError("label empty or too long")
# Step 5: Check ACE prefix
if label.startswith(sace_prefix):
raise UnicodeError("Label starts with ACE prefix")
# Step 6: Encode with PUNYCODE
label = label.encode("punycode")
# Step 7: Prepend ACE prefix
label = ace_prefix + label
# Step 8: Check size
if 0 < len(label) < 64:
return label
raise UnicodeError("label empty or too long")
def ToUnicode(label):
# Step 1: Check for ASCII
if isinstance(label, bytes):
pure_ascii = True
else:
try:
label = label.encode("ascii")
pure_ascii = True
except UnicodeError:
pure_ascii = False
if not pure_ascii:
# Step 2: Perform nameprep
label = nameprep(label)
# It doesn't say this, but apparently, it should be ASCII now
try:
label = label.encode("ascii")
except UnicodeError:
raise UnicodeError("Invalid character in IDN label")
# Step 3: Check for ACE prefix
if not label.startswith(ace_prefix):
return str(label, "ascii")
# Step 4: Remove ACE prefix
label1 = label[len(ace_prefix):]
# Step 5: Decode using PUNYCODE
result = label1.decode("punycode")
# Step 6: Apply ToASCII
label2 = ToASCII(result)
# Step 7: Compare the result of step 6 with the one of step 3
# label2 will already be in lower case.
if str(label, "ascii").lower() != str(label2, "ascii"):
raise UnicodeError("IDNA does not round-trip", label, label2)
# Step 8: return the result of step 5
return result
### Codec APIs
class Codec(codecs.Codec):
def encode(self, input, errors='strict'):
if errors != 'strict':
# IDNA is quite clear that implementations must be strict
raise UnicodeError("unsupported error handling "+errors)
if not input:
return b'', 0
try:
result = input.encode('ascii')
except UnicodeEncodeError:
pass
else:
# ASCII name: fast path
labels = result.split(b'.')
for label in labels[:-1]:
if not (0 < len(label) < 64):
raise UnicodeError("label empty or too long")
if len(labels[-1]) >= 64:
raise UnicodeError("label too long")
return result, len(input)
result = bytearray()
labels = dots.split(input)
if labels and not labels[-1]:
trailing_dot = b'.'
del labels[-1]
else:
trailing_dot = b''
for label in labels:
if result:
# Join with U+002E
result.extend(b'.')
result.extend(ToASCII(label))
return bytes(result+trailing_dot), len(input)
def decode(self, input, errors='strict'):
if errors != 'strict':
raise UnicodeError("Unsupported error handling "+errors)
if not input:
return "", 0
# IDNA allows decoding to operate on Unicode strings, too.
if not isinstance(input, bytes):
# XXX obviously wrong, see #3232
input = bytes(input)
if ace_prefix not in input:
# Fast path
try:
return input.decode('ascii'), len(input)
except UnicodeDecodeError:
pass
labels = input.split(b".")
if labels and len(labels[-1]) == 0:
trailing_dot = '.'
del labels[-1]
else:
trailing_dot = ''
result = []
for label in labels:
result.append(ToUnicode(label))
return ".".join(result)+trailing_dot, len(input)
class IncrementalEncoder(codecs.BufferedIncrementalEncoder):
def _buffer_encode(self, input, errors, final):
if errors != 'strict':
# IDNA is quite clear that implementations must be strict
raise UnicodeError("unsupported error handling "+errors)
if not input:
return (b'', 0)
labels = dots.split(input)
trailing_dot = b''
if labels:
if not labels[-1]:
trailing_dot = b'.'
del labels[-1]
elif not final:
# Keep potentially unfinished label until the next call
del labels[-1]
if labels:
trailing_dot = b'.'
result = bytearray()
size = 0
for label in labels:
if size:
# Join with U+002E
result.extend(b'.')
size += 1
result.extend(ToASCII(label))
size += len(label)
result += trailing_dot
size += len(trailing_dot)
return (bytes(result), size)
class IncrementalDecoder(codecs.BufferedIncrementalDecoder):
def _buffer_decode(self, input, errors, final):
if errors != 'strict':
raise UnicodeError("Unsupported error handling "+errors)
if not input:
return ("", 0)
# IDNA allows decoding to operate on Unicode strings, too.
if isinstance(input, str):
labels = dots.split(input)
else:
# Must be ASCII string
input = str(input, "ascii")
labels = input.split(".")
trailing_dot = ''
if labels:
if not labels[-1]:
trailing_dot = '.'
del labels[-1]
elif not final:
# Keep potentially unfinished label until the next call
del labels[-1]
if labels:
trailing_dot = '.'
result = []
size = 0
for label in labels:
result.append(ToUnicode(label))
if size:
size += 1
size += len(label)
result = ".".join(result) + trailing_dot
size += len(trailing_dot)
return (result, size)
class StreamWriter(Codec,codecs.StreamWriter):
pass
class StreamReader(Codec,codecs.StreamReader):
pass
### encodings module API
def getregentry():
return codecs.CodecInfo(
name='idna',
encode=Codec().encode,
decode=Codec().decode,
incrementalencoder=IncrementalEncoder,
incrementaldecoder=IncrementalDecoder,
streamwriter=StreamWriter,
streamreader=StreamReader,
)
SILENT KILLER Tool