2009-11-01 23 views
0

Utilisation de Python J'ai besoin de transférer des données codées non utf-8 (en particulier shift-jis) vers une URL via la chaîne de requête. Comment dois-je transférer les données? Citez-le? Encoder dans utf-8?comment ouvrir une URL avec des arguments non utf-8

Merci

+3

unicode n'est pas un encodage, donc tous les urls ont des arguments non-unicode. Je présume que vous voulez dire non-utf-8. –

+0

merci pour la correction - mis à jour – hoju

Répondre

4

Les paramètres de chaîne de requête sont basés sur des octets. Alors que les caractères IRI vers URI et les caractères non ASCII typés utiliseront typiquement UTF-8, rien ne vous oblige à envoyer ou à recevoir vos propres paramètres dans cet encodage.

Donc, pour Shift-JIS (en fait généralement CP932, l'extension Windows de ce codage):

foo= u'\u65E5\u672C\u8A9E' # 日本語 
url= 'http://www.example.jp/something?foo='+urllib.quote(foo.encode('cp932')) 

En Python 3, vous le faites dans la même fonction de citation:

foo= '\u65E5\u672C\u8A9E' 
url= 'http://www.example.jp/something?foo='+urllib.parse.quote(foo, encoding= 'cp932') 
1

Je ne sais pas ce que unicode a à voir avec cela, puisque la chaîne de requête est une chaîne d'octets. Vous pouvez utiliser les fonctions de création de devis dans urllib pour citer des chaînes simples afin qu'elles puissent être transmises dans des chaînes de requête.

0

Par la chaîne de requête «vous voulez dire HTTP GET like in http:/{URL}?data=XYZ?

Vous avez encoder toutes les données que vous avez via base64.b64encode en utilisant -_ comme caractère alternatif pour être sûr d'URL en option. Voir here.

+0

ouais - les paramètres GET – hoju

+0

Base64encode? Vous devriez le code URLEncode! http://en.wikipedia.org/wiki/Percent-encoding – BalusC

+0

Une question de goût, n'est-ce pas? Pour des données arbitraires, je resterais avec Base64. Pour le contenu textuel, c'est plus obfusant mais pas plus déroutant que ma réponse mal éditée ci-dessus, que je suis en train de relire ... – mkluwe