所以,我正在编写这个代码,将数据发送到服务器,以显示给用户。我遇到了unicode角色的问题。当我从IDE运行脚本时,服务器获取“正确”的unicode str,并且显示正确,但是在使用py2exe或cx_Freeze冻结脚本并运行.exe文件时,显示器由??组成。 ? ??? ???而不是字符。
我假设这是由于用于冻结脚本的编码?我对编码的经验很少,所以请原谅我的无知。以下是有问题的代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*- #someone suggested this would solve the problem
import os, time, json, urllib2, getpass, socket, subprocess, ast, ctypes, sys
reload(sys)
sys.setdefaultencoding('UTF8') # another suggestion was to force UTF-8 to be def encoding
subprocess.Popen('chcp 65001', shell=True) # thought I'd give it a go forcing cmd to use utf-8
EnumWindows = ctypes.windll.user32.EnumWindows
EnumWindowsProc = ctypes.WINFUNCTYPE(ctypes.c_bool, ctypes.POINTER(ctypes.c_int), ctypes.POINTER(ctypes.c_int))
GetWindowText = ctypes.windll.user32.GetWindowTextW
GetWindowTextLength = ctypes.windll.user32.GetWindowTextLengthW
def get_active_window(): #function that gives me the title of the active window (unicode)
hwnd = ctypes.windll.user32.GetForegroundWindow()
length = GetWindowTextLength(hwnd)
buff = ctypes.create_unicode_buffer(length + 1)
GetWindowText(hwnd, buff, length + 1)
return buff.value
def send_server(data, url): #sending data to the server
req = urllib2.Request(url)
req.add_header('Content-Type', 'application/json')
return urllib2.urlopen(req, data).read()
send_server(get_active_window(), "http://foo.com");
提醒一下,这在从IDE运行时有效,所以当我冻结脚本时,我猜测会出现问题吗?
先谢谢你的帮助!!!!
编辑:我已修复编码以匹配编码:名称,仍然没有运气答案 0 :(得分:1)
我在这里有一个非常相似的脚本做同样的事情我已经使用CxFreeze来分发我的应用程序,但它与你的应用程序略有不同。我也使用过Python2.7并在Windows XP,7,8和10上进行了测试。
但在尝试使用我的解决方案之前,我已经意识到您的编码行是错误的,因为它需要像according to docs这样:
编码:名称或编码=评论中的名称。
所以,你必须 put:或=
如果您愿意,可以尝试这种方式对我有用:
from win32gui import GetWindowText, GetForegroundWindow
active_window = GetWindowText(GetForegroundWindow())
我已使用this great website下载win32gui