Windows 中文 GBK 编码,这 TM 烦死我了! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
master13
V2EX    Python

Windows 中文 GBK 编码,这 TM 烦死我了!

  •  
  •   master13 2015-11-09 15:35:55 +08:00 6874 次点击
    这是一个创建于 3626 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大家好,我就是前两天被炒鱿鱼的那个傻吊

    你们知道想在一个社区混个脸熟有多麻烦吗?

    中文简体 Windows 系统竟然是 GBK 编码的

    就说#coding=utf8,去读中文路径,你就比如os.walk(r'd:\python\暴走大事件')硬编码在代码里根本读不到任何东西,就因为代码里“暴走大事件”用 utf8 来看待,系统路径用 gbk 存的。想解决这个问题:

    • coding=gbk→失去了成为世界级程序员抱负
    • 从 windows 命令行读入包含中文的参数→失去了懒散的程序员硬编码时的快乐

    难道就没有别的办法吗?

    34 条回复    2015-11-14 00:51:28 +08:00
    yxaaa123
        1
    yxaaa123  
       2015-11-09 15:38:39 +08:00
    你用 vs 写,你用 c#啊,不然你换系统啊,扯没用的
    paulagent
        2
    paulagent  
       2015-11-09 15:39:04 +08:00 via Android
    ???
    yangtukun1412
        3
    yangtukun1412  
       2015-11-09 15:40:43 +08:00
    用 unicode
    lilydjwg     4
    lilydjwg  
       2015-11-09 15:44:14 +08:00
    用 Python 3 就好了嘛。
    lilydjwg
        5
    lilydjwg  
       2015-11-09 15:45:22 +08:00
    PS: NT 内部使用的是 UTF-16LE 。就是那堆 W 结尾的 API 。 A 结尾的 API 跟 Python 2 一样,属于历史遗留问题。
    wy315700
        6
    wy315700  
       2015-11-09 15:47:43 +08:00   1
    程序没写好,怪系统喽
    firemiles
        7
    firemiles  
       2015-11-09 15:48:27 +08:00
    把 r 改成 u 不就行了
    imn1
        8
    imn1  
       2015-11-09 15:52:46 +08:00
    windows 运行 utf-8 的 py 程序前,先运行"chcp 65001"命令
    Narcissu5
        9
    Narcissu5  
       2015-11-09 15:54:14 +08:00
    cmd 有项参数可以改变字符集。不过有时候 cmd 是被别的程序打开的,比如 ide ,就比较难办了。
    9hills
        10
    9hills  
       2015-11-09 15:55:22 +08:00
    os.walk(r'd:\python\暴走大事件')

    你知道字符串前面加『 r 』是什么意思么。。。
    zjqzxc
        11
    zjqzxc  
       2015-11-09 15:56:12 +08:00
    咱能用 python3 么
    master13
        12
    master13  
    OP
       2015-11-09 16:03:45 +08:00
    @9hills 不知道……难道是“日”的意思?
    lsmgeb89
        13
    lsmgeb89  
       2015-11-09 16:18:06 +08:00
    看到楼主第一句话震惊了!
    9hills
        14
    9hills  
       2015-11-09 16:25:19 +08:00
    @master13 不知道你为啥要加 r 。。。

    写程序的最大忌讳就是不知道你在写什么,搜一下 Python String Unicode 这几个关键词吧
    gssdromen
        15
    gssdromen  
       2015-11-09 16:26:03 +08:00
    虽然用 GBK 这点的确值得吐槽,但这真的是很好解决的问题...
    lilydjwg
        16
    lilydjwg  
       2015-11-09 16:30:55 +08:00
    @9hills 你知道字符串前面加「 r 」是什么意思么?

    回答别人的问题的最忌讳你根本不知道你在说什么,搜一下 Python raw string 吧。
    lilydjwg
        17
    lilydjwg  
       2015-11-09 16:31:53 +08:00
    @firemiles 那样,如果路径里有个 test 目录就不好了。 Python 2 可以 ur'...' 的。不过不一定有用, Python 2 的标准库关于 unicode 的支持是混乱的。
    PythonAnswer
        18
    PythonAnswer  
       2015-11-09 16:34:49 +08:00
    py3 无问题.
    leavic
        19
    leavic  
       2015-11-09 16:42:44 +08:00
    #coding:utf8
    import os

    chs_path=u'中文'
    dir=os.path.join(os.curdir,chs_path)
    for item in os.walk(dir):
    print item
    ======================
    我这还是 python 2.7 ,楼主你离世界级程序员可能差了两个平行宇宙。
    fengyqf
        20
    fengyqf  
       2015-11-09 16:47:57 +08:00
    咱能不能不用中文做文件名?
    或者知道所使用工具的特性和缺陷
    9hills
        21
    9hills  
       2015-11-09 16:51:19 +08:00
    @lilydjwg 呵呵,好像谁不知道是的

    我指点 lz 去搜索 unicode string 就是让他去走正确的路,搜 raw string 你是想让他进坑么?
    lilydjwg
        22
    lilydjwg  
       2015-11-09 16:54:54 +08:00
    @9hills 你不让他用 raw string 写 Windows 路径不是让他掉进另一个坑么?还是你根本不知道 raw string 是干嘛的?我那是让你搜,没让他搜。
    9hills
        23
    9hills  
       2015-11-09 16:55:36 +08:00
    @lilydjwg

    乖乖用 unicode ,用 os.path.join()去拼路径,嘛事都没有。 ur'string'也是教的一手好 python
    9hills
        24
    9hills  
       2015-11-09 16:56:12 +08:00
    @lilydjwg 呵呵,你不会用 os.path.join()去拼接路径么,直接去写 windows 路径那才是巨坑
    9hills
        25
    9hills  
       2015-11-09 16:58:04 +08:00
    明明 Python 给了不能算是非常好但是还不错的跨平台解决办法,就要用一些平台独占的 tips 。。还沾沾自喜,这种写法迟早掉大坑。
    xiaosha009
        26
    xiaosha009  
       2015-11-09 18:46:47 +08:00
    系统说:“怪我咯~”
    zkd8907
        27
    zkd8907  
       2015-11-09 18:55:05 +08:00
    Windows :这锅我不背
    flynaj
        28
    flynaj  
       2015-11-09 21:29:16 +08:00 via Android
    还得注意 windows 10 有所变化,
    fangdingjun
        29
    fangdingjun  
       2015-11-09 21:50:30 +08:00   1
    windows 下文件名写成这样的也可以 d:/path/file/aaa.txt,
    用中文要用 unicode, u 前缀,这样
    os.walk(u'd:/python/暴走大事件')

    os.walk 调用的是 os.listdir ,
    os.listdir 传 unicode, 返回的也是 unicode, 传 gbk ,返回的也是 gbk

    我也是踩了好多坑才明白的
    shenghe
        30
    shenghe  
       2015-11-10 08:44:48 +08:00
    python 的编码支持确实是大坑。 python 的编码和包管理机制,都是设计之初就有问题的玩意
    urmyfaith
        31
    urmyfaith  
       2015-11-10 09:44:11 +08:00
    咱能不能不用中文做文件名?

    +10086
    esile
        32
    esile  
       2015-11-10 09:57:07 +08:00 via iPhone
    py2 妥妥的可以玩
    fy
        33
    fy  
       2015-11-10 22:28:39 +08:00
    编码的坑主要还是建议直接 py3 走起
    dofine
        34
    dofine  
       2015-11-14 00:51:28 +08:00
    公司内部还在用 Pytho 2.6 的飘过~
    中文的坑全部都用 #coding=gbk 了。。
    慢慢竟然也看习惯了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5508 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 07:18 PVG 15:18 LAX 00:18 JFK 03:18
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86