V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Sylv  ›  全部回复第 92 页 / 共 107 页
回复总数  2124
1 ... 88  89  90  91  92  93  94  95  96  97 ... 107  
2015-01-20 14:38:18 +08:00
回复了 Sylv 创建的主题 Python TL;DR - 有关 Python 2 和 Sublime Text 中文 Unicode 编码问题的分析与理解
@lizheming 其实我这是 "Too long; Don't read, unless you know what I'm talking about." 的缩写。笑。
2015-01-20 12:44:26 +08:00
回复了 KyL 创建的主题 Python py 爬中文网页,总是遭遇 UnicodeEncodeError
@KyL 之前说的长答案 /t/163786
2015-01-20 10:32:46 +08:00
回复了 lylqlh 创建的主题 macOS Chrome 转 Safari 后有几个需要的功能没了,帮忙看一下呗
@lylqlh 刚搜到一个扩展,可以恢复多个关闭的 tabs
https://github.com/Antrikshy/RecoverTabs
就是因为图一的 word_max_len 没将输入解码成 unicode,而中文的 str 和 unicode 的 len 是不同的,unicode 的 len 才是中文正确的 len。
2015-01-19 16:50:03 +08:00
回复了 xgdgsc 创建的主题 macOS OS X Yosemite 的灵异 bug
这真是 feature,当初发布会的时候还特意介绍了这个功能:Power Nap
http://support.apple.com/en-us/ht5394
2015-01-19 10:34:09 +08:00
回复了 bmin 创建的主题 问与答 即将蚕变,敬请期待! (人人这是要干嘛?)
@luovuus 人人以前的双语特效电影外挂字幕都很赞,但是很多都没共享到其它字幕网站,导致现在这些字幕完全找不到了,希望能人人能考虑下提供个途径下载这些字幕。
@aheadlead 用支持多个硬盘的 NAS,一直插着就好,我就这么用的。
2015-01-19 04:39:59 +08:00
回复了 vixvix 创建的主题 问与答 乐视盒子跑 XBMC 一运行就退出怎么破?
用安卓盒子跑 XBMC 就是折腾,性能也不好。实在要用 XBMC 的话,最好还是用 HTPC。
刻 PT 的资源,要翻起来的时候多累啊。你现在可以只用电脑看,但万一你以后想要用平板看、电视看、投影看、多个房间要看,用碟多不方便啊。PT拖的片刻碟保存那么久根本没意义,就像十几年前刻的 VCD、DVD,还在还会有人翻出来看吗?推荐还是用 NAS 吧。
2015-01-19 04:10:37 +08:00
回复了 KyL 创建的主题 Python py 爬中文网页,总是遭遇 UnicodeEncodeError
@KyL 你概念理解有错

首先,Python 2 unicode 和 str 转换方法要弄清楚:
str.decode('utf-8') -> unicode
unicode.encode('utf-8') -> str

我上例中 text.encode('utf-8') 后已经是 str 了。

然后你理解错了,str 并不是只能存储 ascii 类型的字符。str 存储的是一个一个的字节数据,也可以说就是一个一个字节的数字。然后这些数字代表的是什么字符,要看你用什么编码去解读它。

例如现在一个 str 用一个字节存储了数字 97,那么你用 ascii 编码去解读它,那么这个 str 就是 'a'。

然后现在有一个 str 用三个字节存储了三个数字:235、184 和 173,连起来用 16 进制表示也就是 '\xe4\xb8\xad'。然后你也可以用 ascii 编码去解读它,查 ascii 表后可以发现这三个数字都不在基本的 128 位 ascii 里,而是在扩展表里,都是一些很奇怪的字符,可见这个 str 用 ascii 编码去解读它对我们来说没有意义。
但是我们换一个编码 'utf-8' 去解读它,这个 str 就变得有意义了,在 utf-8 编码里是用三个字节来存储一个汉字字符的,而不是像 ascii 编码一个字节就对应了一个字符。那么 235、184 和 173 这三个字节的数字在 utf-8 编码里对应的就是一个汉字字符的 “中”。你可以用以下方法验证:
>>> char = u'中'
>>> print type(char)
<type 'unicode'>
>>> char = char.encode('utf-8')
>>> print type(char)
<type 'str'>
>>> print repr(char) # repr 方法可以将对象在 Python 内部的存储形式表现出来
'\xe4\xb8\xad'
>>> print char

>>> print '\xe4\xb8\xad'


在 print 这个 str 类型的 char 时,Python 只是把那三个数字直接发送给了用来显示的控制台(console)。console 就是用来输出的地方,例如 Sublime Text 的运行结果窗口,还有 Windows 下的 cmd。
然后决定用什么编码去解读它,是由 console 来决定的。在 Sublime Text 下这个编码默认是 utf-8,它用 utf-8 去解读 235、184 和 173 这三个数字,发现是 “中” 字,那么它就会去字库里找出 “中” 字这个字形给我们显示出来,因此我们就能看到 “中” 了。
而在 cmd 下,它用来解读的编码就不是 utf-8 了,而是 gbk 之类的。那它用 gbk 编码去解读这三个数字,可能它能找到另一些对应的字符,也有可能它完全找不到对应的字符,这时就产生了显示出乱码的情况。如果你想让它显示出 “中”,那么你就要让 Python 发送给它 gbk 编码下 “中” 所对应的数字,也就是 214 和 208,写成 16进制就是 '\xd6\xd0'。

因此你在 print 的时候想要显示正常,要看你现在的输出 console 用的是什么编码,然后就要发送给它对应编码的 str。
我最开始所说 html 是 utf-8 编码的 str,意思就是 html 里存储的字节序列,就是你想要的网页源码文字在 utf-8 编码下对应的一个个的数字,所以我们可以说它是 utf-8 编码的 str,因为它在 ascii 和 gbk 等编码下是没有意义的。Python 将它送给 Sublime Text, Sublime Text 也用 utf-8 编码去解读它,最后就能显示出你能看得懂的网页源代码文字。
2015-01-18 15:16:23 +08:00
回复了 KyL 创建的主题 Python py 爬中文网页,总是遭遇 UnicodeEncodeError
@KyL str 存储的是 bytes 字节序列,不是只有 1 byte。它当然就有不同的编码,见下例,同样表示的是 “中文” 的 str 字符串,在不同编码下,其内部存储的字节序列是不同的:
>>> text = u'中文'
>>> text.encode('utf-8')
'\xe4\xb8\xad\xe6\x96\x87'
>>> text.encode('gbk')
'\xd6\xd0\xce\xc4'
2015-01-18 13:44:25 +08:00
回复了 KyL 创建的主题 Python py 爬中文网页,总是遭遇 UnicodeEncodeError
你这个问题其实是和 Sublime Text 有关的,我刚好在总结一篇相关的 Unicode 编码问题的分析,写好会分享出来。

而针对你这个问题的短答案是:
你在最后将 str 类型的 html decode 为了 unicode 类型的字符串,然后想要打印 print 出这个 unicode 字符串时,Python 又需要将其转换为 str 后才能输出。在正常情况下,Python 能判断出正确的输出编码来进行转换而并不会出错,这就是前面有人说在他们的环境能正常运行的原因。而你会出现 UnicodeEncodeError 的原因是,因为某种原因,在 Sublime Text 里运行的 Python 不能判断出这个正确的输出编码,于是它就使用了它的默认编码 ascii 来进行转换,于是就出错了。
在 Sublime Text 里想要 print 出一个 unicode 类型的字符串,正确的方法是显式地进行 encode('utf-8') 后再 print。而为什么我说要用的是 utf-8 编码,而不是前面说的 gbk 等编码呢?因为默认配置下的 Sublime Text 所接收的默认输出编码是 utf-8,你用其它编码会出现 [Decode error - output not utf-8] 错误。而如果你用 cmd 运行的话,可能就要用 gbk 等编码了。
而针对这种情况下的你这段代码,其实最后没必要 .decode('utf-8') 一遍,因为 html 原本就是 utf-8 编码的 str 了,可以直接 print html 了,否则你需要多此一举 print html.decode('utf-8').encode('uff-8')。

关于这个问题的详细解释和其它解决方法,请等我的长答案。
2015-01-18 12:45:46 +08:00
回复了 zvDC 创建的主题 Python 求助:利用 requests 模拟登录,中文数据提交 + 两次 302 重定向
'\xb5\xc7\xc2\xbc' 和 '\265\307\302\274' 应该是等价的,只是表示方式不一样,不过是一个写成的是16进制,一个写成的是8进制的。所以应该直接提交 u'登录'.encode('gb2312 ') 就好了。

根据 requests 文档,向 requests.Session 的 cookies 中添加新值,应该这样就好了:
s.cookies.update({"name":'value'})

另外我不理解为什么你在 r = s.post(url_login) 之前还要 s.get(url_login) 一次?同样的还有 s.get(url_default)?看样子你不需要这两个的 response,那为什么要多此一举地 get 一下呢?
@fadequ 这个扫描应该是为了检测哪个 wifi 信道的干扰比较小(每次结果还不一样,可能是因为那几个信道的质量应该都差不多),你可以在路由器里设置到干扰最小的信道,可以提高点信号强度。另外可以把 Transmit Power 设置高点来提高路由器的 wifi 信号发射功率,对信号强度也有点帮助。
但是应该以上办法对你的情况可能都帮助不大,最好的解决办法是把路由器移到离你电脑近点的地方,或者再买个路由器做为无线 AP 放在信号不好的地方。
另外就是不同厂商的设备判断选择同 ssid 的最优 wifi 信号的算法其实是有不一样的。
有的设备连上一个信号后,即使当前有更好的信号,除非之前的信号衰减到一定值以下才会重新去连接更好的信号。一般这些设备优先考虑的是稳定性,不会频繁切换 wifi 信号。
苹果的算法应该还是可以的,我家里一共有5个同名同密码的 wifi 信号,2个 2.4G 的,3个 5G 的,基本上我的 iPhone 和 MacBook 选择到的信号都是我所要的。
你装个检测 wifi 信号的程序测下就知道,这种情况一般就是因为你电脑的位置 5G 的信号没 2.4 G的信号好。5G 虽然带宽大,但穿墙能力弱,衰减快,即使你在那里强制连接到了 5G 信号,可能速率还没有 2.4G 的好。
2015-01-16 02:15:59 +08:00
回复了 cevincheung 创建的主题 奇思妙想 深夜发个小想法,流言终结者
果壳现在不就有这部分内容吗。这种东西适合果壳和知乎做,要不然做了没公信力,人家凭什么相信你说这是流言?
2015-01-16 02:11:38 +08:00
回复了 bellchu 创建的主题 macOS Yosemite 最大化按钮
我是用 BetterTouchTool 设置成在触摸板的最上方轻触一下就是最大化,无比方便。
1 ... 88  89  90  91  92  93  94  95  96  97 ... 107  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2720 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 38ms · UTC 15:46 · PVG 23:46 · LAX 07:46 · JFK 10:46
Developed with CodeLauncher
♥ Do have faith in what you're doing.