标签: encoding

让JSON对象接受字节或让urlopen输出字符串

使用Python 3,我从URL请求json文档.

response = urllib.request.urlopen(request)
Run Code Online (Sandbox Code Playgroud)

response对象是一个类似文件的对象readreadline方法.通常,可以使用以文本模式打开的文件创建JSON对象.

obj = json.load(fp)
Run Code Online (Sandbox Code Playgroud)

我想做的是:

obj = json.load(response)
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用,因为urlopen以二进制模式返回文件对象.

当然,解决方法是:

str_response = response.read().decode('utf-8')
obj = json.loads(str_response)
Run Code Online (Sandbox Code Playgroud)

但这感觉很糟糕......

有没有更好的方法可以将字节文件对象转换为字符串文件对象?或者我错过任何参数urlopenjson.load给出编码?

python encoding json urlopen python-3.x

176
推荐指数
7
解决办法
14万
查看次数

ArrayBuffer到base64编码的字符串

我需要一种有效的(读取本机)方式将ArrayBuffer转换为需要在多部分帖子上使用的base64字符串.

javascript base64 encoding arraybuffer

168
推荐指数
11
解决办法
16万
查看次数

如何确定OSX中的文件编码?

我正在尝试将一些UTF-8字符输入到TextMate中的LaTeX文件中(其默认编码为UTF-8),但LaTeX似乎并不理解它们.Running cat my_file.tex在Terminal中正确显示字符.跑步ls -al显示我以前从未见过的东西:文件列表中的"@":

-rw-r--r--@  1 me      users      2021 Feb 11 18:05 my_file.tex
Run Code Online (Sandbox Code Playgroud)

(而且,是的,我正在使用\usepackage[utf8]{inputenc}LaTeX.)

我发现了iconv,但似乎无法告诉我编码是什么 - 它只会在我弄清楚之后转换.

macos encoding latex utf-8

164
推荐指数
7
解决办法
20万
查看次数

为什么我们不应该在py脚本中使用sys.setdefaultencoding("utf-8")?

我见过很少的py脚本在脚本的顶部使用它.在什么情况下应该使用它?

import sys
reload(sys)
sys.setdefaultencoding("utf-8")
Run Code Online (Sandbox Code Playgroud)

python encoding utf-8 python-2.x sys

158
推荐指数
3
解决办法
18万
查看次数

正确的方法来定义Python源代码编码

PEP 263定义了如何声明Python源代码编码.

通常,Python文件的前两行应该以:

#!/usr/bin/python
# -*- coding: <encoding name> -*-
Run Code Online (Sandbox Code Playgroud)

但我看到很多文件以:

#!/usr/bin/python
# -*- encoding: <encoding name> -*-
Run Code Online (Sandbox Code Playgroud)

=> 编码而不是编码.

那么声明文件编码的正确方法是什么?

是否允许编码,因为使用的正则表达式是懒惰的?或者它只是声明文件编码的另一种形式?

我问这个问题是因为PEP没有谈论编码,它只是谈论编码.

python encoding

156
推荐指数
4
解决办法
8万
查看次数

UnicodeEncodeError:'charmap'编解码器无法编码 - 字符映射到<undefined>,打印功能

我正在编写一个Python(Python 3.3)程序,使用POST方法将一些数据发送到网页.主要用于调试过程我得到页面结果并使用print()函数在屏幕上显示它.

代码是这样的:

conn.request("POST", resource, params, headers)
response = conn.getresponse()
print(response.status, response.reason)
data = response.read()
print(data.decode('utf-8'));
Run Code Online (Sandbox Code Playgroud)

HTTPResponse .read()方法返回一个bytes编码页面的元素(这是一个结构良好的UTF-8文档)在我停止使用Windows的IDLE GUI并使用Windows控制台之前,这似乎没问题.返回的页面有一个U + 2014字符(em-dash),打印功能可以在Windows GUI中很好地转换(我假定代码页1252),但不在Windows控制台中(代码页850).鉴于strict默认行为,我收到以下错误:

UnicodeEncodeError: 'charmap' codec can't encode character '\u2014' in position 10248: character maps to <undefined>
Run Code Online (Sandbox Code Playgroud)

我可以使用这个非常难看的代码修复它:

print(data.decode('utf-8').encode('cp850','replace').decode('cp850'))
Run Code Online (Sandbox Code Playgroud)

现在用一个替换有问题的字符" - " ?.不是理想的情况(连字符应该是一个更好的替代品),但足够我的目的.

我的解决方案中有几件我不喜欢的东西.

  1. 所有解码,编码和解码都是丑陋的代码.
  2. 它解决了这个案例的问题.如果我使用其他编码(latin-1,cp437,返回cp1252等)为系统移植程序,它应该识别目标编码.它不是.(例如,当再次使用IDLE GUI时,emdash也会丢失,之前没有发生过)
  3. 如果将emdash翻译成连字符而不是审讯爆炸会更好.

问题不在于emdash(我可以想到解决这个问题的几种方法),但我需要编写健壮的代码.我正在向页面提供来自数据库的数据,并且数据可以返回.我可以预见到许多其他相互矛盾的情况:'Á'U+ 00c1(在我的数据库中可能)可以转换为CP-850(西欧语言的DOS/Windows控制台编码)但不能转换为CP-437(美国的编码)英语,在许多Windows instalations中是默认的).

那么,问题是:

有没有更好的解决方案使我的代码与输出接口编码无关?

python encoding encode decode

149
推荐指数
5
解决办法
31万
查看次数

在Python中序列化JSON时,"TypeError:(Integer)不是JSON可序列化的"?

我试图从python发送一个简单的字典到json文件,但我一直得到"TypeError:1425不是JSON可序列化"的消息.

import json
alerts = {'upper':[1425],'lower':[576],'level':[2],'datetime':['2012-08-08 15:30']}
afile = open('test.json','w')
afile.write(json.dumps(alerts,encoding='UTF-8'))
afile.close()
Run Code Online (Sandbox Code Playgroud)

如果我添加默认参数,那么它会写入,但整数值将作为字符串写入json文件,这是不可取的.

afile.write(json.dumps(alerts,encoding='UTF-8',default=str))
Run Code Online (Sandbox Code Playgroud)

python encoding json typeerror

145
推荐指数
6
解决办法
9万
查看次数

编码和字符集有什么区别?

我对文本编码和字符集感到困惑.出于很多原因,我必须在即将开展的工作中学习非Unicode,非UTF8的东西.

我在电子邮件标题中找到"charset"一词,如"ISO-2022-JP",但在文本编辑器中没有这样的编码.(我环顾了不同的文字编辑.)

文本编码和字符集之间有什么区别?如果您能向我展示一些用例示例,我将不胜感激.

encoding character-encoding

142
推荐指数
9
解决办法
4万
查看次数

在OS X Lion中,LANG未设置为UTF-8,如何解决?

我尝试在OS X Lion中设置postgress,并发现没有正确设置LOCALE环境var.

这是设定的:

LANG=
LC_COLLATE="C"
LC_CTYPE="C"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=
Run Code Online (Sandbox Code Playgroud)

我期待UTF-8的东西.这是一个干净的OS X Lion设置,具有西班牙语.我什么都不动.

我不知道如何设置UTF-8.

在终端设置中,检查UTF-8并将LOCALE设置为打开,尽管不起作用.

macos terminal encoding utf-8

140
推荐指数
4
解决办法
11万
查看次数

正则表达式中的"\ d"是否表示数字?

我发现123,\d匹配1,3但没有2.我想知道是否\d匹配满足什么样的要求的数字?我在谈论Python风格的正则表达式.

Gedit中的正则表达式插件使用Python风格的正则表达式.我创建了一个文本文件,其内容为

123
Run Code Online (Sandbox Code Playgroud)

只有13正则表达式相匹配\d; 2不是.

通常对于其间没有其他字符的数字序列,只有奇数位数是匹配的,偶数位数不是.例如12345,匹配是1,35.

python regex encoding gedit

139
推荐指数
5
解决办法
27万
查看次数