-
bytes, str, unicode์ ์ฐจ์ด์ Computer Science/Python 2023. 7. 28. 22:19๋ฐ์ํ
ํ์ด์ฌ 3 ์์๋ bytes, str ๋๊ฐ์ง ํ์ ์ผ๋ก ๋ฌธ์ ์ํ์ค๋ฅผ ๋ํ๋ธ๋ค.
bytes ์ธ์คํด์ค๋ raw 8๋นํธ ๊ฐ์ ์ ์ฅํ๋ค. str ์ธ์คํด์ค๋ ์ ๋์ฝ๋ ๋ฌธ์๋ฅผ ์ ์ฅํ๋ค.
ํ์ด์ฌ 2์์๋ str ๊ณผ unicode ๋ ๊ฐ์ง ํ์ ์ผ๋ก ๋ฌธ์ ์ํ์ค๋ฅผ ๋ํ๋ธ๋ค.
ํ์ด์ฌ 3 ์๋ ๋ค๋ฅด๊ฒ str ์ธ์คํด์ค๋ raw 8๋นํธ ๊ฐ์ ์ ์ฅํ๋ค. unicode ์ธ์คํด์ค๋ ์ ๋์ฝ๋ ๋ฌธ์๋ฅผ ์ ์ฅํ๋ค.
์ ๋์ฝ๋ ๋ฌธ์๋ฅผ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ(0๊ณผ 1, 8๋นํธ๊ฐ) ๋ก ํํํ๋ ๋ฐฉ๋ฒ์ ๋ง๋ค. ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ธ์ฝ๋ฉ์ UTF-8์ด๋ค.
์ค์ํ ๊ฑด ํ์ด์ฌ 3์ str ๊ณผ ํ์ด์ฌ 2์ unicode ๋ ์ฐ๊ด๋ ๋ฐ์ด๋๋ฆฌ ์ธ์ฝ๋ฉ์ด ์๋ค๋ ์ ์ด๋ค.
์ ๋์ฝ๋ ๋ฌธ์๋ฅผ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ก ๋ณํํ๋ ค๋ฉด encode ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
๋ฐ๋๋ก bytes๋ฅผ unicode ๋ฌธ์๋ก ๋ณํํ๋ ค๋ฉด decode ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
def to_str(bytes_or_str): if isinstance(bytes_or_str, bytes): value = bytes_or_str.decode('utf-8') else: value = bytes_or_str return value
open ํจ์
ํ์ด์ฌ 3์์ ๋ด์ฅ ํจ์ open ์ด ๋ฐํํ๋ ํ์ผ ํธ๋ค์ ์ฌ์ฉํ๋ ์ฐ์ฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก UTF-8 ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ๋ค.
ํ์ด์ฌ 2์์ ํ์ผ ์ฐ์ฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ์ด๋๋ฆฌ ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ๋ค.
์ด ์ฐจ์ด์ ์ ์ฌ๊ฐํ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ผ๋ฏ๋ก ์ฃผ์ํด์ผ ํ๋ค.
์๋ฅผ ๋ค์ด ์์์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ํ์ผ์ ๊ธฐ๋กํ๋ ค ํ๋ค๊ณ ํด๋ณด์.
๋ค์ ์ฝ๋๋ ํ์ด์ฌ 2์์๋ ์ ๋์ํ์ง๋ง, ํ์ด์ฌ 3์์๋ ๋์ํ์ง ์๋๋ค. ํ์ด์ฌ 2 ์์ ๋์ํ๊ฒ ํ๋ ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋ฌธ์ ์ฐ๊ธฐ ๋ชจ๋('w')๊ฐ ์๋ ๋ฐ์ด๋๋ฆฌ ์ฐ๊ธฐ ๋ชจ๋('wb')๋ก ์คํํด์ผ ํ๋ค.
with open('/tmp/random.bin', 'w') as f: f.write(os.urandom(10))
>>>> TypeError: must be str, not bytes
<๋ฌธ์์ด์ ํฌ๊ธฐ>
my_str = "abd" encoded_bytes = my_str.encode("utf-8") bit_size = len(encoded_bytes) * 8 print(bit_size) # 24
์ ์ฝ๋์์ encoded_bytes ๋ ๋ฌธ์์ด "abd"๋ฅผ "utf-8" ์ธ์ฝ๋ฉ์ผ๋ก ๋ณํํ ๋ฐ์ดํธ๋ฅผ ๋ํ๋ธ๋ค. len(encoded_bytes)๋ ๋ณํ๋ ๋ฐ์ดํธ์ ํฌ๊ธฐ๋ฅผ ๋ฐ์ดํธ ๋จ์๋ก ๋ํ๋ด๋ฉฐ, ์ฌ๊ธฐ์ 8์ ๊ณฑํด์ฃผ๋ฉด ๋นํธ ํฌ๊ธฐ๋ฅผ ๊ตฌํ ์ ์๋ค.
๋ฐ๋ผ์ ๋ฌธ์์ด "abd"๋ 8 ๋ฐ์ดํธ, 24๋นํธ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๊ณ ์์์ ์ ์ ์๋ค.
'Computer Science > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ์ด์ฌ - Call by assignment (0) 2023.08.03 ํ์ด์ฌ ์ฌ๋ผ์ด์ฑ - Stride (0) 2023.07.29 ํ์ด์ฌ split ํจ์ (๋ฌธ์์ด ์ชผ๊ฐ๊ธฐ) (0) 2023.07.26 ํ์ด์ฌ map ํจ์ (0) 2023.07.25