When Korean Text in CSV Files Appears Garbled: How to Check Encoding, Commas, and Leading Zeros Separately
κ±°λ λ΄μμ΄λ κ²μκΈ λͺ©λ‘μ λ΄λ €λ°μλλ° νκΈμ΄ μ΄μν λ¬Έμλ‘ λ³΄μ΄λ©΄ νμΌμ΄ μμλλ€κ³ μκ°νκΈ° μ½μ΅λλ€. κ·Έλ¬λ νμΌμ λ°μ΄νΈλ μ μμ΄κ³ νλ‘κ·Έλ¨μ΄ λ€λ₯Έ λ¬Έμ μΈμ½λ©μΌλ‘ ν΄μνμ μλ μμ΅λλ€. λ°λλ‘ κΈμλ μ½νλλ° μ£Όμκ° μ¬λ¬ μ΄λ‘ κ°λΌμ§κ±°λ μν μ½λμ μμ리 0μ΄ μ¬λΌμ§λ λ¬Έμ λ μΈμ½λ©λ§ λ°κΏμλ ν΄κ²°λμ§ μμ΅λλ€.
μ΄ κΈμ μλ³Έμ 보쑴ν μνμμ μΈ λ¬Έμ λ₯Ό λΆλ¦¬ν΄ νμΈνλ μ μ°¨λ₯Ό μ μν©λλ€. μ€μ΅ λ°μ΄ν°λ κ°μμ μ΄λ¦κ³Ό μ½λλ₯Ό μ§μ μμ±ν κ²μ λλ€. μ€μ κ³ κ° μλ£λ₯Ό μΈλΆ λ³ν μ¬μ΄νΈμ μ¬λ¦¬μ§ μμλ κ°μ μ νμ μ€λ₯λ₯Ό μ¬νν μ μμ΅λλ€. ν΄κ²° μ¬λΆλ νμΌμ΄ μ΄λ¦¬λμ§λ§ λ³΄μ§ λ§κ³ ν μ, μ΄ μ, μ€μν κ°κΉμ§ λΉκ΅ν΄μ νλ¨ν©λλ€.
2. μλ³Έ νμΌκ³Ό μμ ꡬ쑰λ₯Ό λ¨Όμ κΈ°λ‘νμΈμ
λ€μ΄λ‘λν CSVλ₯Ό 볡μ¬νκ³ λ³΅μ¬λ³ΈμΌλ‘ μμ ν©λλ€. 첫 νμ΄ μ΄ μ΄λ¦μΈμ§, μ΄μ΄ λͺ κ°μΈμ§, μΌνμ ν μ€ μ΄λ ꡬλΆμλ₯Ό μ°λμ§ κΈ°λ‘νμΈμ. νμΌ νμ₯μκ° CSVλΌλ μ¬μ€λ§μΌλ‘ μ€μ ꡬλΆμλ λ¬Έμ μΈμ½λ©κΉμ§ μ μλ μμ΅λλ€. λ΄λ³΄λ΄κΈ° νλ‘κ·Έλ¨μ μ€μ μ΄ μλ€λ©΄ μΆμΈ‘λ³΄λ€ κ·Έ κ°μ μ°μ νμΈν©λλ€.
μΌλ° ν μ€νΈ νΈμ§κΈ°λ‘ μ΄μ΄ κΈμκ° μ μμΈμ§ νμΈνλ©΄ λ¬Έμ λ²μλ₯Ό μ€μΌ μ μμ΅λλ€. νΈμ§κΈ°μμλ μ μμΈλ° μ€νλ λμνΈμμλ§ κΉ¨μ§λ©΄ κ°μ Έμ€κΈ° μ€μ μ μ΄ν΄λ΄ λλ€. λͺ¨λ μ΄μνλ€λ©΄ μλ³Έ μμ± λ¨κ³ λλ μΈμ½λ© μ νμ νμΈν©λλ€. μ΄λ―Έ κΉ¨μ§ λ¬Έμμ΄μ λ€μ μ μ₯ν νμΌμ΄λΌλ©΄ λ¨μ μ¬μ μ₯μΌλ‘ μλ κΈμκ° λμμ¨λ€κ³ κΈ°λνμ§ λ§μΈμ.
3. UTF-8κ³Ό UTF-8 BOMμ ꡬλΆνμΈμ
UTF-8 BOMμ νμΌ μμμ μλ³ λ°μ΄νΈμ λλ€. μΌλΆ λκ΅¬κ° UTF-8μ νλ¨νλ λ° λμμ΄ λμ§λ§ λͺ¨λ νκ²½μμ νμμΈ κ²μ μλλλ€. Pythonμ utf-8-sigλ μ°κΈ°μμλ BOMμ λ£κ³ μ½κΈ°μμλ μμΌλ©΄ μ κ±°ν©λλ€. μ΄λ μΈμ½λ©μ μ¬μ©νλμ§ λ΄λ³΄λ΄λ μͺ½κ³Ό λ°λ μͺ½μ΄ ν©μνλ νΈμ΄ κ°μ₯ λͺ νν©λλ€.
νκΈ νμΌμ μ΄ λλ§λ€ μΈμ½λ© ν보λ₯Ό λ°κΏ 보λ λ°©λ²μ μμ μ§λ¨μ λλ€. UnicodeDecodeErrorκ° λ¬λ€λ μ΄μ λ§μΌλ‘ λͺ¨λ νμΌμ CP949λ‘ κ³ μ νλ©΄ λ€λ₯Έ μ λ ₯μμ κ°μ λ¬Έμ κ° μκΉλλ€. μ€λ₯λ₯Ό 무μνλ μ΅μ μ λ¬Έμλ₯Ό μμ μ μμΌλ―λ‘ μ λ΅μ²λΌ μ¬μ©νμ§ λ§μΈμ. λ³ν ν μ΄λ¦ ν κ°λ§ νμΈνμ§ λ§κ³ νΉμλ¬Έμμ μ€λ°κΏμ΄ μλ κ°λ λΉκ΅ν©λλ€.
4. μΌνλ‘ μ§μ λλλ©΄ μ μ΄μ΄ λμ΄λ κΉμ?
μμΈ, λμ μ²λΌ λ°μ΄ν° μ체μ μΌνκ° λ€μ΄κ°λ©΄ CSVλ λ°μ΄νλ‘ νλλ₯Ό κ°μλλ€. μ€λ°κΏλ νλ μμ λ€μ΄κ° μ μμ΅λλ€. λ°λΌμ splitμΌλ‘ μ€κ³Ό μΌνλ₯Ό λλλ λ°©μμ ꡬ쑰λ₯Ό 보쑴νμ§ λͺ»ν©λλ€. Pythonμμλ csv λͺ¨λμ readerμ writerλ‘ μ½κ³ μ°λ νΈμ΄ μ ν©ν©λλ€.
μ€μ΅μ μ΄λ¦, μ½λ, λ©λͺ¨μ μΈ μ΄μ λ§λ€κ³ λ©λͺ¨μ μΌνμ μ€λ°κΏμ λ£μ΅λλ€. νμΌμ μ΄ λ newlineμ λΉ λ¬Έμμ΄λ‘ μ§μ νκ³ csv λͺ¨λμ΄ μ€ μ²λ¦¬ κ·μΉμ λ΄λΉνκ² ν©λλ€. μμ μ μ볡 κ²μ¦μ μ μ₯ν κ°μ λ€μ μ½μ΄ μ²μ κ°κ³Ό κ°λ€λ κ²μ νμΈν©λλ€. μμ μ λͺ¨λ κ°μ Έμ€κΈ° λμκΉμ§ κ²μ¦νλ κ²μ μλλλ€.
5. μ«μμ²λΌ 보μ¬λ μλ³μλ λ¬Έμμ΄μ λλ€
00123μ κ³μ°ν μλμ΄ μλλΌ μλ³μμΌ μ μμ΅λλ€. CSV μμ λ¬Έμμ΄λ‘ μ μ₯λΌ μμ΄λ μ€νλ λμνΈκ° μ«μλ‘ μλ λ³ννλ©΄ 123μΌλ‘ λ³΄μΌ μ μμ΅λλ€. μ΄ κ²½μ° κ°μ Έμ€κΈ° νλ©΄μμ ν΄λΉ μ΄μ ν μ€νΈλ‘ μ§μ νμΈμ. μ νλ²νΈ, μ°νΈλ²νΈ, μ£Όλ¬Έ λ²νΈλ κ°μ νλ¨μ΄ νμν©λλ€.
μμ μ€ μ΄λ―Έ 0μ΄ μ¬λΌμ‘λ€λ©΄ μλ³Έκ³Ό λΉκ΅ν΄μΌ ν©λλ€. 무쑰건 λ€μ― μλ¦¬λ‘ μ±μ°λ λ°©μμ μλ κΈΈμ΄λ₯Ό λͺ¨λ₯΄λ μλ³μμμ ν릴 μ μμ΅λλ€. μΈμ½λ©μ κ³ μ³λ μλ£ν λ³νμ λ³λ λ¬Έμ μ΄λ―λ‘ λ³ν μμ κΈ°λ‘μ λ νλͺ©μ λλμ΄ μ μ΅λλ€. μ μ νμμ κ° λ³΄μ‘΄μ μλ‘ λ€λ₯Έ κ²μ¬μ λλ€.
6. μ€λ¬΄ μ μ©κ³Ό μ€ν¨ μ λμκ° μ§μ
λ°λ νλ‘κ·Έλ¨μμ νμΌ κ°μ Έμ€κΈ° κΈ°λ₯μ μ ννκ³ μΈμ½λ©, ꡬλΆμ, ν μ€νΈ μ΄μ λͺ μν©λλ€. 미리보기μμ μ΄ μ΄λ¦κ³Ό 첫 λͺ νμ νμΈν λ€ μλ³Έμ μ 체 ν μμ λΉκ΅νμΈμ. μ λͺ© μμ λ°μ΄ν, λ©λͺ¨μ μ€λ°κΏ, λΉ κ°μ΄ μλ νμ νλ³ΈμΌλ‘ ν¬ν¨νλ©΄ ꡬ쑰 μ€λ₯λ₯Ό μ°ΎκΈ° μ½μ΅λλ€.
CSVλ μμ, μ μμ, μ¬λ¬ μνΈ κ°μ λ¬Έμ μ 보λ₯Ό 보쑴νλ νμμ΄ μλλλ€. λ³ν ν λ¬Έμ κΈ°λ₯μ΄ νμνλ€λ©΄ μλ³Έ μ€νλ λμνΈλ₯Ό λ°λ‘ 보κ΄ν©λλ€. μΈλΆ μ λ ₯μ μ€νλ λμνΈμ λ°°ν¬νλ κ²½μ° μμμ²λΌ ν΄μλλ μ λ κ²ν ν΄μΌ ν©λλ€. μλ μμ λ κ·Έλ° μμ μ²λ¦¬κΉμ§ ꡬνν 보μ νν°κ° μλλλ€.
7. μ€μ΅μ λ³νν΄μ κ²μ¦ λ²μλ₯Ό λνκΈ°
첫 μ€μ΅μμ κ°μ΄ κ°λ€λ κ²°κ³Όκ° λμ€λ©΄ μ λ ₯μ μ‘°κΈμ© λ°κΏ 보μΈμ. λ©λͺ¨μ ν°λ°μ΄νλ₯Ό λ£κ±°λ λΉ λ¬Έμμ΄μ λ£κ³ μ μ₯κ³Ό μ½κΈ°λ₯Ό λ€μ λΉκ΅ν©λλ€. μ½λ μ΄μ κ°μ 00001, 01000, A001μ²λΌ λ€μνκ² λ§λ€λ©΄ μλ£νμ μ«μλ‘ λ°κΎΈλ λꡬμμ μ°¨μ΄λ₯Ό μ€λͺ νκΈ° μ½μ΅λλ€. λ³νμ ν λ²μ νλμ© ν΄μΌ μ€ν¨ν 쑰건μ μ μ μμ΅λλ€.
λ λ²μ§Έ λΉκ΅μμλ μΌλΆλ¬ λ¨μ splitμ μ¬μ©ν΄ λ³΄κ³ csv reader κ²°κ³Όμ λμ‘°ν©λλ€. λ©λͺ¨μ μΌνκ° μλ νμμλ λμ΄ κ°μ μ μμ§λ§ μΌνκ° μλ νμμλ νλ μκ° λ¬λΌμ§λλ€. μΌλΆ μ μ νλ§ λ³΄κ³ μ 체 λ³νμ΄ λ§λ€κ³ κ²°λ‘ λ΄λ¦¬μ§ μλ μ΄μ μ λλ€. μ€λ°κΏμ΄ μλ νλλ νλ©΄μ μ¬λ¬ μ€λ‘ 보μ¬λ νλμ κ°μΌ μ μμ΅λλ€.
μμ κΈ°λ‘μλ μ λ ₯ νμΌ μ΄λ¦, μΈμ½λ©, ꡬλΆμ, μ΄ μ, λ°μ΄ν° ν μμ νμΈν μλ³μ μμλ₯Ό λ¨κΉλλ€. νμΌμ λ€μ μ μ₯νλ€λ©΄ μΆλ ₯ μ΄λ¦λ μ μ΅λλ€. μλ³Έκ³Ό λ³νλ³Έμ κ°μ ν΄λμ λ λλ μ λ―Έμ¬λ‘ ꡬλΆνκ³ , κ²μ¬ κ²°κ³Όκ° λ§κΈ° μ μλ μλ³Έμ κ΅μ²΄νμ§ μμ΅λλ€. μ΄ μμλ λ°μ΄ν°λ₯Ό μ¬μμ§ν μ μλ μν©μμ νΉν λμμ΄ λ©λλ€.
μ€νλ λμνΈμμ μμ리 0 보쑴μ νμΈνλ €λ©΄ κ³μ°μ μ°λ μλ μ΄κ³Ό μλ³μ μ΄μ ꡬλΆν ν μ€νΈ νμΌμ μ€λΉν©λλ€. μλμ ν©κ³λ₯Ό κ³μ°νκ³ μλ³μλ λ¬Έμ κ·Έλλ‘ λΉκ΅νμΈμ. λͺ¨λ μ΄μ ν μ€νΈλ‘ λ§λ€λ©΄ μΌλΆ κ³μ° κΈ°λ₯μ΄ λΆνΈν΄μ§ μ μμΌλ―λ‘ λͺ©μ λ³ μλ£νμ μ νλ νΈμ΄ μ’μ΅λλ€. νλ©΄ μμμΌλ‘ 0μ νμν κ²°κ³Όμ μλ λ¬Έμμ΄ λ³΄μ‘΄λ ꡬλΆν΄μΌ ν©λλ€.
곡μ ν λλ κ°μΈ μλ£ λμ κ°μ ꡬ쑰μ κ°μ νμ λ§λλλ€. μλ₯Ό λ€μ΄ μ΄ κ°μμ λ°μ΄ν, μ€λ°κΏμ μ μ§νκ³ μ€μ μ΄λ¦κ³Ό λ²νΈλ λ체ν©λλ€. λ΄λΉμκ° μ€λ₯λ₯Ό μ¬ννλ λ° νμν κ²μ λΉλ° κ°μ΄ μλλΌ νμκ³Ό μ²λ¦¬ μμμ λλ€. λ¬Έμ κ° μ¬νλλ μ΅μ νμΌμ λ¨κΈ°λ©΄ νλ‘κ·Έλ¨μ΄ λ°λ λ€μλ νκ· μ κ²μ μ¬μ©ν μ μμ΅λλ€.
8. λ°λΌ νλ μμ
λͺ λ Ήκ³Ό μ½λλ νμ΅μ©μ λλ€. μ€λͺ μ νμλ μ€ν νκ²½μ ꡬλΆνκ³ μ μν ν΄λ λλ λͺ¨μ μ λ ₯μΌλ‘ μμνμΈμ.
μμ μ½λ
import csv
from pathlib import Path
rows = [
['name', 'code', 'note'],
['νκΈΈλ', '00123', 'μμΈ, λμ '],
['κΉνλ', '00456', '첫 μ€\nλμ§Έ μ€'],
]
p = Path('csv_demo_utf8_bom.csv')
if p.exists():
raise SystemExit('κ°μ νμΌμ΄ μμ΅λλ€. μ ν΄λμμ μ€ννμΈμ.')
with p.open('w', encoding='utf-8-sig', newline='') as f:
csv.writer(f).writerows(rows)
with p.open(encoding='utf-8-sig', newline='') as f:
loaded = list(csv.reader(f))
assert loaded == rows
print('ν:', len(loaded), 'μ΄:', len(loaded[1]))
print('μ½λ:', loaded[1][1])9. κ²μ¦ κ²°κ³Όμ ν΄μ
| νμΈ νλͺ© | κ²°κ³Ό λλ κ²μ¦ λ²μ |
|---|---|
| BOM λ°μ΄νΈ | ef bb bf |
| μ 체 ν / μ΄ | 3ν / κ° 3μ΄ |
| μλ³μ | 00123 보쑴 |
| μλͺ»λ μΌν split | λ©λͺ¨ ν¬ν¨ νμ΄ 4κ° νλ |
| csv reader | κ°μ νμ΄ 3κ° νλ |
Python 3.12 λ‘컬 νκ²½μμ μ§μ λ§λ λ¬Έμμ΄μ μ μ₯Β·μ½κΈ°λ₯Ό κ²μ¦νμ΅λλ€. Windows Excelμμμ μ΄ κ°μ Έμ€κΈ° κ²°κ³Όλ μ΄λ² μ€μ΅μμ μννμ§ μμμ΅λλ€.
10. μμ£Ό 묻λ μ§λ¬Έ
λͺ¨λ CSVμ BOMμ λ£μ΄μΌ νλμ?
μλλλ€. λ°λ νλ‘κ·Έλ¨μ κΈ°λ νμμ λ§μΆ° μ νν©λλ€. ν νκ²½μμ μ μ΄λ¦°λ€λ μ¬μ€λ§μΌλ‘ λͺ¨λ λꡬμ νΈνλλ€κ³ νλ¨νμ§ λ§μΈμ.
CSVλ₯Ό XLSXλ‘ λ°κΎΈλ©΄ ν΄κ²°λλμ?
κ°μ Έμ€κΈ° κ³Όμ μμ κ°μ΄ μλͺ» ν΄μλλ©΄ κ·Έ μνκ° μ νμΌμ μ μ₯λ©λλ€. λ³ν μ μ μΈμ½λ©κ³Ό μλ£νμ νμΈν΄μΌ ν©λλ€.
λΉ μ€μ΄ μκΈ°λ©΄ μΈμ½λ© λ¬Έμ μΈκ°μ?
μ€λ°κΏ μ²λ¦¬μ νλ μ μ€λ°κΏλ νμΈνμΈμ. csv λͺ¨λκ³Ό newline μ€μ μ ν¨κ» μ¬μ©νκ³ μλ³Έ λ°μ΄ν°μ λΉκ΅ν©λλ€.
11. 곡μ μ°Έκ³ μλ£
λμ μ μμ μ΅μ μ μλ μ μμ λ¬Έμμμ νμΈν μ μμ΅λλ€. λ³Έλ¬Έμ μ¬λ‘μ μμ λ νμ΅μ μν΄ λ 립μ μΌλ‘ ꡬμ±νμ΅λλ€.
μμ μ λ ₯μ νμ΅μ© λͺ¨μ μλ£μ λλ€. μ€μ νκ²½μ μ μ©ν λλ λ³Έλ¬Έμ μλ΄ν κ²μ¦ λ²μμ 쑰건μ νμΈνμΈμ.
π¬ 0 Comments