Python 字符串转 BSTR

2 投票
1 回答
3345 浏览
提问于 2025-04-17 04:00

我在Windows 7上使用iTunes的COM接口。

方法iTunes.CurrentTrack.AddArtworkFromFile(path)需要的路径类型是BSTR。

通过一些研究,我了解到BSTR是一种C++/Visual Basic的数据类型,意思是基本字符串。

有没有办法把Python的ASCII字符串转换成BSTR呢?

代码:

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')

错误信息:pywintypes.com_error: (-2147352567, '发生异常。', (0, None, None, None, 0, -2147467259), None)

1 个回答

3

因为你在使用Python 2.x,所以我觉得你只需要用unicode来代替str,然后win32com会自动处理其他的事情。不过,我本来以为win32com会自动把str转换成unicode

你应该这样写:

iTunes.CurrentTrack.AddArtworkFromFile(u'file://localhost/C:/Users/ArchAngel/Desktop/a.png')

如果这样还是不行,那我觉得你的问题可能出在别的地方。

撰写回答