使用 python 进行简单的 ascii url 编码

发布于 2024-09-06 18:55:22 字数 452 浏览 13 评论 0原文

看一下:

import urllib
print urllib.urlencode(dict(bla='Ã'))

输出是

bla=%C3%BC

我想要的很简单,我想要 ascii 格式的输出而不是 utf-8,所以我需要输出:

bla=%C3

如果我尝试:

urllib.urlencode(dict(bla='Ã'.decode('iso-8859-1')))

不起作用(我所有的 python 文件都是 utf-8 编码的) :

'ascii' 编解码器无法对位置 0-1 中的字符进行编码:序号不在范围(128)

在生产中,输入是 unicode 的。

look at that:

import urllib
print urllib.urlencode(dict(bla='Ã'))

the output is

bla=%C3%BC

what I want is simple, I want the output in ascii instead of utf-8, so I need the output:

bla=%C3

if I try:

urllib.urlencode(dict(bla='Ã'.decode('iso-8859-1')))

doesn't work (all my python files are utf-8 encoded):

'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

In production, the input comes unicoded.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

月寒剑心 2024-09-13 18:55:22

看看 python 中的 unicode 音译

from unidecode import unidecode
print unidecode(u"\u5317\u4EB0")

# That prints: Bei Jing

:您的情况:

bla='Ã'
print unidecode(bla)
'A'

这是一个第三方库,可以通过以下方式轻松安装:

$ git clone http://code.zemanta.com/tsolc/git/unidecode
$ cd unidecode
$ python setup.py install

Have a look at unicode transliteration in python:

from unidecode import unidecode
print unidecode(u"\u5317\u4EB0")

# That prints: Bei Jing

In your case:

bla='Ã'
print unidecode(bla)
'A'

This is a third party library, which can be easily installed via:

$ git clone http://code.zemanta.com/tsolc/git/unidecode
$ cd unidecode
$ python setup.py install
我的鱼塘能养鲲 2024-09-13 18:55:22

我想要 ascii 格式的输出,而不是 utf-8

这不是 ASCII,它没有映射到 0x80 以上的字符。您正在谈论 ISO-8859-1,或者可能是代码页 1252(基于它的 Windows 编码)。

'Ã'.decode('iso-8859-1')

好吧,这取决于您在源代码中保存字符 à 时使用的编码,不是吗?听起来您的文本编辑器已将其另存为 UTF-8。 (这是一件好事,因为像 ISO-8859-1 这样的区域特定编码需要尽快消​​失。)

告诉 Python,您保存的源文件是 UTF-8 格式,按照 PEP 263

# coding=utf-8

urllib.quote(u'Ã'.encode('iso-8859-1'))    # -> %C3

或者,如果您不想那么麻烦,请使用反斜杠转义:

urllib.quote(u'\u00C3'.encode('iso-8859-1'))    # -> %C3

尽管,无论如何,现代 Web 应用程序应该使用 UTF-8 作为输入,而不是 ISO-8859-1/cp1252。

I want the output in ascii instead of utf-8

That's not ASCII, which has no characters mapped above 0x80. You're talking about ISO-8859-1, or possibly code page 1252 (the Windows encoding based on it).

'Ã'.decode('iso-8859-1')

Well that depends on what encoding you've used to save the character à in the source, doesn't it? It sounds like your text editor has saved it as UTF-8. (That's a good thing, because locale-specific encodings like ISO-8859-1 need to go away ASAP.)

Tell Python that the source file you've saved is in UTF-8 as per PEP 263:

# coding=utf-8

urllib.quote(u'Ã'.encode('iso-8859-1'))    # -> %C3

Or, if you don't want that hassle, use a backslash escape:

urllib.quote(u'\u00C3'.encode('iso-8859-1'))    # -> %C3

Although, either way, a modern webapp should be using UTF-8 for its input rather than ISO-8859-1/cp1252.

べ映画 2024-09-13 18:55:22

工作得很好的 asciification 是这样的:

import unicodedata
unicodedata.normalize('NFKD', 'Ã'.decode('UTF-8')).encode('ascii', 'ignore')

pretty well working asciification is this way:

import unicodedata
unicodedata.normalize('NFKD', 'Ã'.decode('UTF-8')).encode('ascii', 'ignore')
誰認得朕 2024-09-13 18:55:22

如果您的输入实际上是 UTF-8 并且您想要 iso-8859-1 作为输出(不是 ASCII),您需要的是:

'ñ'.decode('utf-8').encode('iso-8859-1')

If your input is actually UTF-8 and you want iso-8859-1 as output (which is not ASCII) what you need is:

'ñ'.decode('utf-8').encode('iso-8859-1')
夏夜暖风 2024-09-13 18:55:22

感谢所有解决方案。你们所有人都汇聚到同一个点上。
我把正确的代码更改为 .encode('iso-8859-1') ,结果一团糟

.encode('iso-8859-1') 

.decode('iso-8859-1')

它有效。

thanks to all solutions. all of you converge to the very same point.
I made a mess changing the right code

.encode('iso-8859-1') 

to

.decode('iso-8859-1')

turn back to .encode('iso-8859-1') and it works.

神爱温柔 2024-09-13 18:55:22

unihandecode

Unicode 文本的 US-ASCII 音译。
Python unidecode 的改进版本,即 Sean M. Burke 的 Text::Unidecode Perl 模块的 Python 端口。

pip install Unihandecode

然后在python

import unihandecode
print(unihandecode.unidecode(u'Ã'))

打印A

Package unihandecode is

US-ASCII transliterations of Unicode text.
an improved version of Python unidecode, that is Python port of Text::Unidecode Perl module by Sean M. Burke .

pip install Unihandecode

then in python

import unihandecode
print(unihandecode.unidecode(u'Ã'))

prints A.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文