How do I encode properly a possibly chinese encoding in python? - python
I am scraping the following link:
http://www.footballcornersta.com/en/league.php?select=all&league=%E8%8B%B1%E8%B6%85&year=2014&month=1&Submit=Submit
and the following string contains all the available options in a menu relevant to league:
ls_main = [['E','ENG PR','英超'],['E','ENG FAC','英足总杯'],['E','ENG Champ','英冠'],['E','ENG D1','英甲'],['I','ITA D1','意甲'],['I','ITA D2','意乙'],['S','SPA D1','西甲'],['S','SPA D2','西乙'],['G','GER D1','德甲'],['G','GER D2','德乙'],['F','FRA D1','法甲'],['F','FRA D2','法乙'],['S','SCO PR','苏超'],['R','RUS PR','俄超'],['T','TUR PR','土超'],['B','BRA D1','巴西甲'],['U','USA MLS','美职联'],['A','ARG D1','阿根甲'],['J','JP D1','日职业'],['J','JP D2','日职乙'],['A','AUS D1','澳A联'],['K','KOR D1','韩K联'],['C','CHN PR','中超'],['E','EURO Cup','欧洲杯'],['I','Italy Supe','意超杯'],['K','KOR K3','K3联'],['C','CHN D1','中甲'],['D','DEN D2-E','丹乙东'],['D','DEN D2-W','丹乙西'],['D','DEN D1','丹甲'],['D','DEN PR','丹超'],['U','UKR U21','乌克兰U21'],['U','UD2','乌克甲'],['U','UKR D1','乌克超'],['U','Uzber D1','乌兹超'],['U','URU D1','乌拉甲'],['U','UZB D2','乌茲甲'],['I','ISR D2','以色列乙'],['I','ISR D1','以色列甲'],['I','ISR PR','以色列超'],['I','Iraq L','伊拉联'],['I','Ira D1','伊朗甲'],['I','IRA P','伊朗联'],['R','RUS D2C','俄乙中'],['R','RUS D2U','俄乙乌'],['R','RUS D2S','俄乙南'],['R','RUS D2W','俄乙西'],['R','RUS RL','俄后赛'],['R','RUS D1','俄甲'],['R','RUS PR','俄超'],['B','BUL D1','保甲'],['C','CRO D1','克甲'],['I','ICE PR','冰岛超'],['G','GHA PL','加纳超'],['H','Hun U19','匈U19'],['H','HUN D2E','匈乙东'],['H','HUN D2W','匈乙西'],['H','HUN D1','匈甲'],['N','NIR IFAC','北爱冠'],['N','NIRE PR','北爱超'],['S','SAfrica D1','南非甲'],['S','SAfrica NSLP','南非超'],['L','LUX D1','卢森甲'],['I','IDN PR','印尼超'],['I','IND D1','印度甲'],['G','GUAT D1','危地甲'],['E','ECU D1','厄甲'],['F','Friendly','友谊赛'],['K','KAZ D1','哈萨超'],['C','COL D2','哥伦乙'],['C','COL C','哥伦杯'],['C','COL D1','哥伦甲'],['C','COS D1','哥斯甲'],['T','TUR U23','土A2青'],['T','TUR D3L1','土丙1'],['T','TUR D3L2','土丙2'],['T','TUR D3L3','土丙3'],['T','TUR2BK','土乙白'],['T','TUR2BB','土乙红'],['T','TUR D1','土甲'],['E','EGY PR','埃及超'],['S','Serbia D2','塞尔乙'],['S','Serbia 1','塞尔联'],['C','CYP D2','塞浦乙'],['C','CYP D1','塞浦甲'],['M','MEX U20','墨西U20'],['M','Mex D2','墨西乙'],['M','MEX D1','墨西联'],['A','AUT D3E','奥丙东'],['A','AUT D3C','奥丙中'],['A','AUT D3W','奥丙西'],['A','AUT D2','奥乙'],['A','AUT D1','奥甲'],['V','VEN D1','委超'],['W','WAL D2','威甲'],['W','WAL D2CA','威联盟'],['W','WAL D1','威超'],['A','Ang D1','安哥甲'],['N','NIG P','尼日超'],['P','PAR D1','巴拉甲'],['B','BRA D2','巴西乙'],['B','BRA CP','巴锦赛'],['G','GRE D3N','希丙北'],['G','GRE D3S','希丙南'],['G','GRE D2','希乙'],['G','GRE D1','希甲'],['G','GER U17','德U17'],['G','GER U19','德U19'],['G','GER D3','德丙'],['G','GER RN','德北联'],['G','GER RS','德南联'],['G','GER RW','德西联'],['I','ITA D3A','意丙A'],['I','ITA D3B','意丙B'],['I','ITA D3C1','意丙C1'],['I','ITA D3C2','意丙C2'],['I','ITA CP U20','意青U20'],['E','EST D3','愛沙丙'],['N','NOR D2-A','挪乙A'],['N','NOR D2-B','挪乙B'],['N','NOR D2-C','挪乙C'],['N','NOR D2-D','挪乙D'],['N','NORC','挪威杯'],['N','NOR D1','挪甲'],['N','NOR PR','挪超'],['C','CZE D3','捷丙'],['C','CZE MSFL','捷丙M'],['C','CZE D2','捷乙'],['C','CZE U19','捷克U19'],['C','CZE D1','捷克甲'],['M','Mol D2','摩尔乙'],['M','MOL D1','摩尔甲'],['M','MOR D2','摩洛哥乙'],['M','MOR D1','摩洛超'],['S','Slovakia D3E','斯丙東'],['S','Slovakia D3W','斯丙西'],['S','Slovakia D2','斯伐乙'],['S','Slovakia D1','斯伐甲'],['S','Slovenia D1','斯洛甲'],['S','SIN D1','新加联'],['J','JL3','日丙联'],['C','CHI D2','智乙'],['C','CHI D1','智甲'],['G','Geo','格鲁甲'],['G','GEO PR','格鲁超'],['U','UEFA CL','欧冠杯'],['U','UEFA SC','欧霸杯'],['B','BEL D3A','比丙A'],['B','BEL D3B','比丙B'],['B','BEL D2','比乙'],['B','BEL W1','比女甲'],['B','BEL C','比杯'],['B','BEL D1','比甲'],['S','SAU D2','沙地甲'],['S','SAU D1','沙地联'],['F','FRA D4A','法丁A'],['F','FRA D4B','法丁B'],['F','FRA D4C','法丁C'],['F','FRA D4D','法丁D'],['F','FRA D3','法丙'],['F','FRA U19','法国U19'],['F','FRA C','法国杯'],['P','POL D2E','波乙東'],['P','POL D2W','波乙西'],['P','POL D2','波兰乙'],['P','POL D1','波兰甲'],['B','BOS D1','波斯甲'],['P','POL YL','波青联'],['T','THA D1','泰甲'],['T','THA PL','泰超'],['H','HON D1','洪都甲'],['A','Aus BP','澳布超'],['E','EST D1','爱沙甲'],['I','IRE D1','爱甲'],['I','IRE PR','爱超'],['B','BOL D1','玻利甲'],['F','Friendly','球会赛'],['S','SWI D1','瑞士甲'],['S','SWI PR','瑞士超'],['S','SWE D2','瑞甲'],['S','SWE D1','瑞超'],['B','BLR D2','白俄甲'],['B','BLR D1','白俄超'],['P','Peru D1','秘鲁甲'],['T','TUN D2','突尼乙'],['T','Tun D1','突尼甲'],['R','ROM D2G1','罗乙1'],['R','ROM D2G2','罗乙2'],['R','ROM D1','罗甲'],['L','LIBERT C','自由杯'],['F','FIN D2','芬甲'],['F','FIN D1','芬超'],['S','SCO D3','苏丙'],['S','SUD PL','苏丹超'],['S','SCO D2','苏乙'],['S','SCO D1','苏甲'],['S','SCO HL','苏高联'],['E','ENG D2','英乙'],['E','ENG RyPR','英依超'],['E','ENG UP','英北超'],['E','ENG SP','英南超'],['E','ENG Trophy','英挑杯'],['E','ENG Con','英非'],['E','ENG CN','英非北'],['H','HOL D2','荷乙'],['H','HOL Yl','荷青甲'],['S','SV D1','萨尔超'],['P','POR U19','葡U19'],['P','POR D1','葡甲'],['P','POR PR','葡超'],['S','SPA D3B1','西丙1'],['S','SPA D3B2','西丙2'],['S','SPA D3B3','西丙3'],['S','SPA D3B4','西丙4'],['S','SPA Futsal','西內足'],['S','SPA W1','西女超'],['B','BRA CC','里州赛'],['A','Arg D2M1','阿乙M1'],['A','Arg D2M2','阿乙M2'],['A','Arg D2M3','阿乙M3'],['A','ALG D2','阿及乙'],['A','ALG D1','阿及甲'],['A','AZE D1','阿塞甲'],['A','ALB D1','阿巴超'],['A','ARG D2','阿根乙'],['U','UAE D2','阿联乙'],['K','KOR NL','韩联盟'],['F','FYRM D2','马其乙'],['M','MacedoniaFyr','马其甲'],['M','MAS D1','马来超'],['M','MON D2','黑山乙'],['M','MON D1','黑山甲'],['F','FCWC','世冠杯'],['W','World Cup','世界杯'],['F','FIFAWYC','世青杯'],['C','CWPL','中女超'],['C','CFC','中足协杯'],['D','DEN C','丹麦杯'],['A','Asia CL','亚冠杯'],['A','AFC','亚洲杯'],['R','Rus Cup','俄罗斯杯'],['H','HUN C','匈杯'],['N','NIR C','北爱杯'],['T','TUR C','土杯'],['T','Tenno Hai','天皇杯'],['W','WWC','女世杯'],['I','ITA Cup','意杯'],['G','GER C','德国杯'],['J','JPN LC','日联杯'],['S','SCO FAC','苏足总杯'],['E','ENG JPT','英锦赛'],['E','ENG FAC','足总杯'],['C','CAF NC','非洲杯'],['K','K-LC','韩联杯'],['H','HK D1','香港甲']];
The link of the page I am scraping contains the third character, but when I copy it becomes the link above.
I am not sure about the encoding.
import re
html = 'source of page'
matches = re.findall('ls_main = \[\[.*?;', html)[0]
matches = matches.decode('unknown encoding').encode('utf-8')
How can I put the original character in the string of the link ?
I use Python 2.7.
%XX encoding can be done using urllib.qutoe:
>>> import urllib
>>> urllib.quote('英冠')
'%E8%8B%B1%E5%86%A0'
>>> urllib.quote(u'英冠'.encode('utf-8')) # with explicit utf-8 encoding.
'%E8%8B%B1%E5%86%A0'
To get back the original string, use urllib.unquote:
>>> urllib.unquote('%E8%8B%B1%E5%86%A0')
'\xe8\x8b\xb1\xe5\x86\xa0'
>>> print(urllib.unquote('%E8%8B%B1%E5%86%A0'))
英冠
In Python 3.x, use urllib.parse.quote, urllib.parse.unquote:
>>> import urllib.parse
>>> urllib.parse.quote('英冠', encoding='utf-8')
'%E8%8B%B1%E5%86%A0'
>>> urllib.parse.unquote('%E8%8B%B1%E5%86%A0', encoding='utf-8')
'英冠'
Related
How to add SYLT(synced lyrics) tag on ID3v2 mp3 file using python?
I want to add synced lyrics from vtt on my mp3 file using python. I tried using the mutagen module but it didn't work as intended. from mutagen.id3 import ID3, USLT, SLT import sys import webvtt lyrics = webvtt.read(sys.argv[2]) lyri = [] lyr = [] for lyric in lyrics: times = [int(x) for x in lyric.start.replace(".", ":").split(":")] ms = times[-1]+1000*times[-2]+1000*60*times[-3]+1000*60*60*times[-4] lyri.append((lyric.text,ms)) lyr.append(lyric.text) fil = ID3(sys.argv[1]) tag = USLT(encoding=3, lang='kor', text="\n".join(lyr)) # this is unsynced lyrics #tag = SLT(encoding=3, lang='kor', format=2, type=1, text=lyri) --- not working print(tag) fil.add(tag) fil.save(v1=0) How can I solve this problem?
I use mutagen to parse an mp3 file that already has SYLT data, and found the usage of SYLT: from mutagen.id3 import ID3, SYLT, Encoding tag = ID3(mp3path) sync_lrc = [("Do you know what's worth fighting for", 17640), ("When it's not worth dying for?", 23640), ...] # [(lrc, millisecond), ] tag.setall("SYLT", [SYLT(encoding=Encoding.UTF8, lang='eng', format=2, type=1, text=sync_lrc)]) tag.save(v2_version=3) But I can't figure out format=2, type=1 means.
check https://id3.org/id3v2.3.0#Synchronised_lyrics.2Ftext format 1: Absolute time, 32 bit sized, using MPEG frames as unit format 2: Absolute time, 32 bit sized, using milliseconds as unit type 0: is other type 1: is lyrics type 2 : is text transcription type 3 : is movement/part name (e.g. "Adagio") type 4 : is events (e.g. "Don Quijote enters the stage") type 5 : is chord (e.g. "Bb F Fsus") type 6 : is trivia/'pop up' information
Python configparser reads comments in values
ConfigParser also reads comments. Why? Shouldn't this be a default thing to "ignore" inline comments? I reproduce my problem with the following script: import configparser config = configparser.ConfigParser() config.read("C:\\_SVN\\BMO\\Source\\Server\\PythonExecutor\\Resources\\visionapplication.ini") for section in config.sections(): for item in config.items(section): print("{}={}".format(section, item)) The ini file looks as follows: [LPI] reference_size_mm_width = 30 ;mm reference_size_mm_height = 40 ;mm print_pixel_pitch_mm = 0.03525 ; mm eye_cascade = "TBD\haarcascade_eye.xml" # The output: C:\_Temp>python read.py LPI=('reference_size_mm_width', '30 ;mm') LPI=('reference_size_mm_height', '40 ;mm') LPI=('print_pixel_pitch_mm', '0.03525 ; mm') LPI=('eye_cascade', '"TBD\\haarcascade_eye.xml" #') I don't want to read 30 ;mm but I want to read just the number '30'. What am I doing wrong? PS: Python3.7
hi use inline_comment_prefixes while creating configparser object check example below config = configparser.ConfigParser(inline_comment_prefixes = (";",)) Here is detailed documentation.
decoding base64 guid in python
I am trying to convert a base64 string back to a GUID style hex number in python and having issues. Base64 encoded string is: bNVDIrkNbEySjZ90ypCLew== And I need to get it back to: 2243d56c-0db9-4c6c-928d-9f74ca908b7b I can do it with the following PHP code but can't work out how to to it in Python function Base64ToGUID($guid_b64) { $guid_bin = base64_decode($guid_b64); return join('-', array( bin2hex(strrev(substr($guid_bin, 0, 4))), bin2hex(strrev(substr($guid_bin, 4, 2))), bin2hex(strrev(substr($guid_bin, 6, 2))), bin2hex(substr($guid_bin, 8, 2)), bin2hex(substr($guid_bin, 10, 6)) )); } Here is the GUIDtoBase64 version: function GUIDToBase64($guid) { $guid_b64 = ''; $guid_parts = explode('-', $guid); foreach ($guid_parts as $k => $part) { if ($k < 3) $part = join('', array_reverse(str_split($part, 2))); $guid_b64 .= pack('H*', $part); } return base64_encode($guid_b64); } Here are some of the results using some of the obvious and not so obvious options: import base64 import binascii >>> base64.b64decode("bNVDIrkNbEySjZ90ypCLew==") 'l\xd5C"\xb9\rlL\x92\x8d\x9ft\xca\x90\x8b{' >>> binascii.hexlify(base64.b64decode("bNVDIrkNbEySjZ90ypCLew==")) '6cd54322b90d6c4c928d9f74ca908b7b'
Python port of the existing function (bitstring required) import bitstring, base64 def base64ToGUID(b64str): s = bitstring.BitArray(bytes=base64.b64decode(b64str)).hex def rev2(s_): def chunks(n): for i in xrange(0, len(s_), n): yield s_[i:i+n] return "".join(list(chunks(2))[::-1]) return "-".join([rev2(s[:8]),rev2(s[8:][:4]),rev2(s[12:][:4]),s[16:][:4],s[20:]]) assert base64ToGUID("bNVDIrkNbEySjZ90ypCLew==") == "2243d56c-0db9-4c6c-928d-9f74ca908b7b"
First off, the b64 string and the resultant GUID doesn't match if we decode properly. >>> import uuid >>> import base64 >>> u = uuid.UUID("2243d56c-0db9-4c6c-928d-9f74ca908b7b") >>> u UUID('2243d56c-0db9-4c6c-928d-9f74ca908b7b') >>> u.bytes '"C\xd5l\r\xb9Ll\x92\x8d\x9ft\xca\x90\x8b{' >>> base64.b64encode(u.bytes) 'IkPVbA25TGySjZ90ypCLew==' >>> b = base64.b64decode('bNVDIrkNbEySjZ90ypCLew==') >>> u2 = uuid.UUID(bytes=b) >>> print u2 6cd54322-b90d-6c4c-928d-9f74ca908b7b The base64 encoded version of the resultant GUID you posted is wrong. I'm not sure I understand the way you're encoding the GUID in the first place. Python has in its arsenal all the tools required for you to be able to answer this problem. However, here's the rough scratching I did in a python terminal: import uuid import base64 base64_guid = "bNVDIrkNbEySjZ90ypCLew==" bin_guid = base64.b64decode(base64_guid) guid = uuid.UUID(bytes=bin_guid) print guid This code should give you enough of a hint to build your own functions. Don't forget, the python shell gives you a powerful tool to test and play with code and ideas. I would investigate using something like IPython notebooks.
I needed to do this to decode a BASE64 UUID that had been dumped from Mongodb. Originally the field had been created by Mongoose. The code I used, based on the code by #tpatja is here: def base64ToGUID(b64str): try: bytes=base64.urlsafe_b64decode(b64str) except Exception as e: print("Can't decode base64 ", e) s = bitstring.BitArray(bytes).hex return "-".join([s[:8],s[8:][:4],s[12:][:4],s[16:][:4],s[20:]])
Based on good answers above, I wrote a version that does not require the bitstring package and includes validations and support for more input options. import base64 import regex import uuid from typing import Optional def to_uuid(obj) -> Optional[uuid.UUID]: if obj is None: return None elif isinstance(obj, uuid.UUID): return obj elif isinstance(obj, str): if regex.match(r'[0-9a-fA-F]{8}[-]{0,1}[0-9a-fA-F]{4}[-]{0,1}[0-9a-fA-F]{4}[-]{0,1}[0-9a-fA-F]{4}[-]{0,1}[0-9a-fA-F]{12}', obj): return uuid.UUID(hex=obj) elif regex.match(r'[0-9a-zA-Z\+\/]{22}[\=]{2}', obj): b64_str = base64.b64decode(obj).hex() uid_str = '-'.join([b64_str[:8], b64_str[8:][:4], b64_str[12:][:4], b64_str[16:][:4], b64_str[20:]]) return uuid.UUID(hex=uid_str) raise ValueError(f'{obj} is not a valid uuid/guid') else: raise ValueError(f'{obj} is not a valid uuid/guid')
BeautifulSoup in Python not parsing right
I am running Python 2.7.5 and using the built-in html parser for what I am about to describe. The task I am trying to accomplish is to take a chunk of html that is essentially a recipe. Here is an example. html_chunk = "<h1>Miniature Potato Knishes</h1><p>Posted by bettyboop50 at recipegoldmine.com May 10, 2001</p><p>Makes about 42 miniature knishes</p><p>These are just yummy for your tummy!</p><p>3 cups mashed potatoes (about<br> 2 very large potatoes)<br>2 eggs, slightly beaten<br>1 large onion, diced<br>2 tablespoons margarine<br>1 teaspoon salt (or to taste)<br>1/8 teaspoon black pepper<br>3/8 cup Matzoh meal<br>1 egg yolk, beaten with 1 tablespoon water</p><p>Preheat oven to 400 degrees F.</p><p>Sauté diced onion in a small amount of butter or margarine until golden brown.</p><p>In medium bowl, combine mashed potatoes, sautéed onion, eggs, margarine, salt, pepper, and Matzoh meal.</p><p>Form mixture into small balls about the size of a walnut. Brush with egg yolk mixture and place on a well-greased baking sheet and bake for 20 minutes or until well browned.</p>" The goal is to separate out the header, junk, ingredients, instructions, serving, and number of ingredients. Here is my code that accomplishes that from bs4 import BeautifulSoup def list_to_string(list): joined = "" for item in list: joined += str(item) return joined def get_ingredients(soup): for p in soup.find_all('p'): if p.find('br'): return p def get_instructions(p_list, ingredient_index): instructions = [] instructions += p_list[ingredient_index+1:] return instructions def get_junk(p_list, ingredient_index): junk = [] junk += p_list[:ingredient_index] return junk def get_serving(p_list): for item in p_list: item_str = str(item).lower() if ("yield" or "make" or "serve" or "serving") in item_str: yield_index = p_list.index(item) del p_list[yield_index] return item def ingredients_count(ingredients): ingredients_list = ingredients.find_all(text=True) return len(ingredients_list) def get_header(soup): return soup.find('h1') def html_chunk_splitter(soup): ingredients = get_ingredients(soup) if ingredients == None: error = 1 header = "" junk_string = "" instructions_string = "" serving = "" count = "" else: p_list = soup.find_all('p') serving = get_serving(p_list) ingredient_index = p_list.index(ingredients) junk_list = get_junk(p_list, ingredient_index) instructions_list = get_instructions(p_list, ingredient_index) junk_string = list_to_string(junk_list) instructions_string = list_to_string(instructions_list) header = get_header(soup) error = "" count = ingredients_count(ingredients) return (header, junk_string, ingredients, instructions_string, serving, count, error) It works well except in situations where I have chunks that contain strings like "Sauté" because soup = BeautifulSoup(html_chunk) causes Sauté to turn into Sauté and this is a problem because I have a huge csv file of recipes like the html_chunk and I'm trying to structure all of them nicely and then get the output back into a database. I tried checking it Sauté comes out right using this html previewer and it still comes out as Sauté. I don't know what to do about this. What's stranger is that when I do what BeautifulSoup's documentation shows BeautifulSoup("Sacré bleu!") # <html><head></head><body>Sacré bleu!</body></html> I get # Sacr├⌐ bleu! But my colleague tried that on his Mac, running from terminal, and he got exactly what the documentation shows. I really appreciate all your help. Thank you.
This is not a parsing problem; it is about encoding, rather. Whenever working with text which might contain non-ASCII characters (or in Python programs which contain such characters, e.g. in comments or docstrings), you should put a coding cookie in the first or - after the shebang line - second line: #!/usr/bin/env python # -*- coding: utf-8 -*- ... and make sure this matches your file encoding (with vim: :set fenc=utf-8).
BeautifulSoup tries to guess the encoding, sometimes it makes a mistake, however you can specify the encoding by adding the from_encoding parameter: for example soup = BeautifulSoup(html_text, from_encoding="UTF-8") The encoding is usually available in the header of the webpage
Python String to BSTR
I am Using the iTunes COM interface on windows 7. The method iTunes.CurrentTrack.AddArtworkFromFile(path) requires path to be of type BSTR. I understand from some research that BSTR is a C++/Visual Basic data type that means basic string. Is there any way of converting python ascii strings to BSTR? code : import urllib from BeautifulSoup import BeautifulSoup import re import win32com.client import sys iTunes = win32com.client.gencache.EnsureDispatch("iTunes.Application") cTrackName = iTunes.CurrentTrack.Name cArtist = iTunes.CurrentTrack.Artist cAlbum = iTunes.CurrentTrack.Album print cAlbum + cArtist + cTrackName url = 'http://www.last.fm/music/'+cArtist+'/'+cAlbum albumPage = urllib.urlopen(url).read() soup = BeautifulSoup(albumPage) s = soup.prettify() z = re.compile('.*<img width="174" src="(.*)" class="art" id="albumCover" itemprop="image" class="albumCover coverMega" />') p = re.findall(z,s) print p urllib.urlretrieve(p[0],'a.png') a = urllib.quote('file://localhost/C:/Users/ArchAngel/Desktop/a.png') iTunes.CurrentTrack.AddArtworkFromFile('file://localhost/C:/Users/ArchAngel/Desktop/a.png') #print binascii.a2b_uu('sadsaffas') iTunes.CurrentTrack.AddArtworkFromFile(b'C:\Users\ArchAngel\Desktop\a.png') Error : pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2147467259), None)
Since you are using Python 2.x, I believe you simply need to use unicode rather than str and win32com will do the rest. However, I would have expected win32com to automatically convert str to unicode for you. You should write it like this: iTunes.CurrentTrack.AddArtworkFromFile(u'file://localhost/C:/Users/ArchAngel/Desktop/a.png') If this does not work then I think your problem lies elsewhere.