ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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๋น„ํŠธ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 

Designed by Tistory.