python - os.listdir() 返回奇怪的韩语值(编码问题)
问题描述
我有文件夹,它的名称包含几个韩语字符。
当我读取文件夹名称列表时os.listdir
,它的名称值与普通字符串完全不同。
例子:
- 来自 os.listdir() 的一个韩文文件夹名称:"누" = (
\xe1\x84\x82\xe1\x85\xae
) - python控制台中的纯字符串“누”=(
\xeb\x88\x84
)
有什么区别?我们可以估计它是由于os.listdir()
混淆了一些编码..
解决方案
这两者都是相同的编码(UTF-8),但是......
"누" = (\xe1\x84\x82\xe1\x85\xae)
这表示由两个 jamo(韩文(韩文)字母表的 24 个组成部分)组成的字符:
>>> import unicodedata
>>> x = b'\xe1\x84\x82'.decode('utf-8')
>>> y = b'\xe1\x85\xae'.decode('utf-8')
>>> unicodedata.name(x)
'HANGUL CHOSEONG NIEUN'
>>> unicodedata.name(y)
'HANGUL JUNGSEONG U'
python 控制台中的“누” = (\xeb\x88\x84)
而当您在控制台窗口中实际键入字符时,您(显然)会得到一个预先组合的字符:
>>> z = b'\xeb\x88\x84'.decode('utf-8')
>>> unicodedata.name(z)
'HANGUL SYLLABLE NU'
推荐阅读
- hadoop - 如何在Hadoop中制作10G的随机文本?
- reactjs - 如何更改反应中的按钮名称?
- python - Django:如何将产品添加到订单模型,因为我尝试显示 ManyRelatedManager' 对象没有属性 'add' 或 filter 或类似错误
- javascript - OpenMapLayers 不在 MVC 项目中渲染地图
- csv - SPSS:将计算结果写入csv文件
- python - 用于门控操作的 keras 自定义层中的自定义卷积和无类型对象
- java - 使用 Java 创建高程剖面
- react-native - 如何在本机反应中制作这种对话框
- c# - specflow 测试被跳过
- python - 如何在 sql 语句中使用来自 python 的两个用户输入?