I'm using python 2.7 and I have some problems converting chars like "ä" to "ae".
I'm retrieving the content of a webpage using:
req = urllib2.Request(url + str(questionID))
response = urllib2.urlopen(req)
data = response.read()
After that I'm doing some extraction stuff and there is my problem.
extractedStr = pageContent[start:end] // this string contains the "ä" !
extractedStr = extractedStr.decode("utf8") // here I get the error, tried it with encode aswell
extractedStr = extractedStr.replace(u"ä", "ae")
--> 'utf8' codec can't decode byte 0xe4 in position 13: invalid continuation byte
But: my simple trial is working fine...:
someStr = "geräusch"
someStr = someStr.decode("utf8")
someStr = someStr.replace(u"ä", "ae")
I've got the feeling, it has something to do with WHEN I try to use the .decode() function... I tried it at several positions, no success :(
Use .decode("latin-1") instead. That is what you are trying to decode.
Related
I have an encoded string, payload, of a request that I want to uncompress.
payload = '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'
My process / goal is explained here. However, I want to stay with Python.
First, I believe I need to decompose the data. With the help of this answer I write:
import base64
payload_in_bytes = base64.b64decode(payload)
Next, I assume that the end-result is a dictionary so I use json.loads() as the documentation states it accepts bytes.
import json
data = json.loads(payload_in_bytes)
However, this results in a UnicodeDecodeError:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position
1: invalid start byte
What am I doing wrong?
Here is a possible solution using gzip()
import base64
import gzip
import json
payload = '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'
binary_string = base64.b64decode(payload)
decomp_data = gzip.decompress(binary_string).decode()
data = json.loads(decomp_data)
print(data)
I am trying to get and parse a webpage that contains non-ASCII characters (the URL is http://www.one.co.il). This is what I have:
url = "http://www.one.co.il"
req = urllib2.Request(url)
response = urllib2.urlopen(req)
encoding = response.headers.getparam('charset') # windows-1255
html = response.read() # The length of this is valid - about 31000-32000,
# but printing the first characters shows garbage -
# '\x1f\x8b\x08\x00\x00\x00\x00\x00', instead of
# '<!DOCTYPE'
html_decoded = html.decode(encoding)
The last line gives me an exception:
File "C:/Users/....\WebGetter.py", line 16, in get_page
html_decoded = html.decode(encoding)
File "C:\Python27\lib\encodings\cp1255.py", line 15, in decode
return codecs.charmap_decode(input,errors,decoding_table)
UnicodeDecodeError: 'charmap' codec can't decode byte 0xdb in position 14: character maps to <undefined>
I tried looking at other related questions such as urllib2 read to Unicode and How to handle response encoding from urllib.request.urlopen() , but didn't find anything helpful about this.
Can someone please shed some light and guide me in this subject? Thanks!
0x1f 0x8b 0x08 is the magic number for a gzipped file. You will need to decompress it before you can use the contents.
I'm working on a new project but I can't fix the error in the title.
Here's the code:
#!/usr/bin/env python3.5.2
import urllib.request , urllib.parse
def start(url):
source_code = urllib.request.urlopen(url).read()
info = urllib.parse.parse_qs(source_code)
print(info)
start('https://www.youtube.com/watch?v=YfRLJQlpMNw')
The error occurred because of .encode which works on a unicode object. So we need to convert the byte string to unicode string using
.decode('unicode_escape')
So the code will be:
#!/usr/bin/env python3.5.2
import urllib.request , urllib.parse
def start(url):
source_code = urllib.request.urlopen(url).read()
info = urllib.parse.parse_qs(source_code.decode('unicode_escape'))
print(info)
start('https://www.youtube.com/watch?v=YfRLJQlpMNw')
Try this
source_code = urllib.request.urlopen(url).read().decode('utf-8')
The error message is self explainatory: there is a byte 0xf0 in an input string that is expected to be an ascii string.
You should have given the exact error message and on what line it happened, but I can guess that is happened on info = urllib.parse.parse_qs(source_code), because parse_qs expects either a unicode string or an ascii byte string.
The first question is why you call parse_qs on data coming from youtube, because the doc for the Python Standart Library says:
Parse a query string given as a string argument (data of type application/x-www-form-urlencoded). Data are returned as a dictionary. The dictionary keys are the unique query variable names and the values are lists of values for each name.
So you are going to parse this on = and & character to interpret it as a query string in the form key1=value11&key2=value2&key1=value12 to give { 'key1': [ 'value11', 'value12'], 'key2': ['value2']}.
If you know why you want that, you should first decode the byte string into a unicode string, using the proper encoding, or if unsure Latin1 which is able to accept any byte:
def start(url):
source_code = urllib.request.urlopen(url).read().decode('latin1')
info = urllib.parse.parse_qs(source_code)
print(info)
This code is rather weird indeed. You are using query parser to parse contents of a web page.
So instead of using parse_qs you should be using something like this.
This question already has answers here:
UnicodeEncodeError: 'charmap' codec can't encode characters
(11 answers)
Closed 5 months ago.
I am trying to make a crawler in python by following an udacity course. I have this method get_page() which returns the content of the page.
def get_page(url):
'''
Open the given url and return the content of the page.
'''
data = urlopen(url)
html = data.read()
return html.decode('utf8')
the original method was just returning data.read(), but that way I could not do operations like str.find(). After a quick search I found out I need to decode the data. But now I get this error
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position
1: invalid start byte
I have found similar questions in SO but none of them were specifically for this. Please help.
You are trying to decode an invalid string.
The start byte of any valid UTF-8 string must be in the range of 0x00 to 0x7F.
So 0x8B is definitely invalid.
From RFC3629 Section 3:
In UTF-8, characters from the U+0000..U+10FFFF range (the UTF-16 accessible range) are encoded using sequences of 1 to 4 octets. The only octet of a "sequence" of one has the higher-order bit set to 0, the remaining 7 bits being used to encode the character number.
You should post the string you are trying to decode.
Maybe the page is encoded with other character encoding but 'utf-8'. So the start byte is invalid.
You could do this.
def get_page(self, url):
if url is None:
return None
response=urllib.request.urlopen(url)
if response.getcode()!=200:
print("Http code:",response.getcode())
return None
else:
try:
return response.read().decode('utf-8')
except:
return response.read()
Web servers often serve HTML pages with a Content-Type header that includes the encoding used to encoding the page. The header might look this:
Content-Type: text/html; charset=UTF-8
We can inspect the content of this header to find the encoding to use to decode the page:
from urllib.request import urlopen
def get_page(url):
""" Open the given url and return the content of the page."""
data = urlopen(url)
content_type = data.headers.get('content-type', '')
print(f'{content_type=}')
encoding = 'latin-1'
if 'charset' in content_type:
_, _, encoding = content_type.rpartition('=')
print(f'{encoding=}')
html = data.read()
return html.decode(encoding)
Using requests is similar:
response = requests.get(url)
content_type = reponse.headers.get('content-type', '')
Latin-1 (or ISO-8859-1) is a safe default: it will always decode any bytes (though the result may not be useful).
If the server doesn't serve a content-type header you can try looking for a <meta> tag that specifies the encoding in the HTML. Or pass the response bytes to Beautiful Soup and let it try to guess the encoding.
I am using urlfetch to fetch a URL. When I try to send it to html2text function (strips off all HTML tags), I get the following message:
UnicodeEncodeError: 'charmap' codec can't encode characters in position ... character maps to <undefined>
I've been trying to process encode('UTF-8','ignore') on the string but I keep getting this error.
Any ideas?
Thanks,
Joel
Some Code:
result = urlfetch.fetch(url="http://www.google.com")
html2text(result.content.encode('utf-8', 'ignore'))
And the error message:
File "C:\Python26\lib\encodings\cp1252.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_table)
UnicodeEncodeError: 'charmap' codec can't encode characters in position 159-165: character maps to <undefined>
You need to decode the data you fetched first! With which codec? Depends on the website you fetch.
When you have unicode and try to encode it with some_unicode.encode('utf-8', 'ignore') i can't image how it could throw an error.
Ok what you need to do:
result = fetch('http://google.com')
content_type = result.headers['Content-Type'] # figure out what you just fetched
ctype, charset = content_type.split(';')
encoding = charset[len(' charset='):] # get the encoding
print encoding # ie ISO-8859-1
utext = result.content.decode(encoding) # now you have unicode
text = utext.encode('utf8', 'ignore') # encode to uft8
This is not really robust but it should show you the way.