如何将Unicode字符串(包含£$等额外字符)转换为Python字符串?
答案 0 :(得分:539)
title = u"Klüft skräms inför på fédéral électoral große"
import unicodedata
unicodedata.normalize('NFKD', title).encode('ascii','ignore')
'Kluft skrams infor pa federal electoral groe'
答案 1 :(得分:303)
如果您不需要翻译非ASCII字符,可以使用encode to ASCII:
>>> a=u"aaaàçççñññ"
>>> type(a)
<type 'unicode'>
>>> a.encode('ascii','ignore')
'aaa'
>>> a.encode('ascii','replace')
'aaa???????'
>>>
答案 2 :(得分:127)
>>> text=u'abcd'
>>> str(text)
'abcd'
如果字符串只包含ascii字符。
答案 3 :(得分:110)
如果您有Unicode字符串,并且想要将其写入文件或其他序列化表单,则必须先将编码成为可以存储的特定表示形式。有几种常见的Unicode编码,例如UTF-16(对大多数Unicode字符使用两个字节)或UTF-8(1-4字节/代码点,取决于字符),等等。要将该字符串转换为特定编码,可以使用:
>>> s= u'£10'
>>> s.encode('utf8')
'\xc2\x9c10'
>>> s.encode('utf16')
'\xff\xfe\x9c\x001\x000\x00'
这个原始字节串可以写入文件。但请注意,在阅读它时,您必须知道它所使用的编码并使用相同的编码对其进行解码。
写入文件时,您可以使用codecs模块摆脱此手动编码/解码过程。因此,要打开将所有Unicode字符串编码为UTF-8的文件,请使用:
import codecs
f = codecs.open('path/to/file.txt','w','utf8')
f.write(my_unicode_string) # Stored on disk as UTF-8
请注意,使用这些文件的任何其他内容必须了解文件的编码方式,如果他们想要阅读它们。如果您是唯一一个读/写的人,这不是问题,否则请确保您使用其他任何使用该文件的形式都可以理解。
在Python 3中,这种形式的文件访问是默认的,内置的open
函数将采用编码参数并始终转换为Unicode字符串(Python 3中的默认字符串对象)文件模式下打开的文件。
答案 4 :(得分:56)
以下是一个例子:
>>> u = u'€€€'
>>> s = u.encode('utf8')
>>> s
'\xe2\x82\xac\xe2\x82\xac\xe2\x82\xac'
答案 5 :(得分:5)
好吧,如果您愿意/准备切换到Python 3(您可能不会因为某些Python 2代码的向后兼容性而导致),您不必进行任何转换; Python 3中的所有文本都用Unicode字符串表示,这也意味着不再使用u'<text>'
语法。实际上,你还有一些字节串,用于表示数据(可能是一个编码的字符串)。
http://docs.python.org/3.1/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit
(当然,如果您当前正在使用Python 3,那么问题可能与您尝试将文本保存到文件的方式有关。)
答案 6 :(得分:3)
这是一个示例代码
import unicodedata
raw_text = u"here $%6757 dfgdfg"
convert_text = unicodedata.normalize('NFKD', raw_text).encode('ascii','ignore')
答案 7 :(得分:1)
文件包含Unicode字符串
d = 0
e = 0
i = 0
p = 0
q = 0
r = 0
s = 0
t = 0
grades = []
lp = []
speicher = []
txt = input("Welche Note möchtest du eintragen? 'quit' zum Abbrechen: ")
while txt != "quit":
grades.extend(txt)
txt = input("Welche Note möchtest du eintragen? 'quit' zum Abbrechen: ")
txt2 = input("Welche Leistungspunkte möchtest du eintragen? 'quit' zum Abbrechen: ")
while txt2 != 'quit':
lp.extend(txt2)
txt2 = input("Welche Leistungspunkte möchtest du eintragen? 'quit' zum Abbrechen: ")
n = len(grades) #n = Länge von Grades
print("Länge von grades ist: ",n)
listgesamt = grades + lp
while i <= len(grades) - 1: #Noten multipliziert mit Leistungspunkten und abgespeichert in "speicher"
a = int (listgesamt[n+i])
b = int (listgesamt[0+i])
c = a * b
speicher.extend(str(c)
i += 1
while p <= len(speicher) - 1: #Summe des Zählers der Berechnung (alle Noten+Lp addiert)
d = int (speicher[0+p])
e += d
p += 1
while q <= len(lp) - 1: #Alle Leistungspunkte addiert
r = int (lp[0+q])
s += r
q += 1
t = sum(int(lp)) # FUNKTIONIERT NE!
print("Der Notendurchschnitt beträgt: ",e/t) # e geteilt durch die Gesamtzahl an verteilten L
对我
\"message\": \"\\u0410\\u0432\\u0442\\u043e\\u0437\\u0430\\u0446\\u0438\\u044f .....\",
答案 8 :(得分:0)
对于我的情况,没有答案。我有一个包含unicode字符的字符串变量,并且这里没有解释的encode-decode起作用。
如果我在终端机上做
int coords = (y << 16) + x;
IntPtr lParam = new IntPtr(coords);
PostMessage(hwnd, WM_LBUTTONDOWN, IntPtr.Zero, lParam);
PostMessage(hwnd, WM_LBUTTONUP, IntPtr.Zero, lParam);
[DllImport("user32.dll", SetLastError = true)]
static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
const Int32 WM_LBUTTONDOWN = 0x201;
const Int32 WM_LBUTTONUP = 0x202;
或
echo "no me llama mucho la atenci\u00f3n"
输出正确:
python3
>>> print("no me llama mucho la atenci\u00f3n")
但是使用脚本加载此字符串变量无法正常工作。
这是解决我的问题的方法,以防万一:
output: no me llama mucho la atención
答案 9 :(得分:0)
有一个可以解决Unicode问题的库,称为 ftfy 。使我的生活更轻松。
示例1
module.exports = {
lifecycles: {
async afterCreate(result, data) {
const administrators = await strapi.query("strapi::user").find({
isActive: true,
blocked: false,
"roles.code": "strapi-super-admin",
});
const emails = administrators.map((a) => a.email);
await strapi.plugins["email"].services.email.send({
to: emails,
from: "robot@strapi.io",
subject: "New message from contact form",
text: `
Yay! We've got a new message.
User's name: ${result.name}.
Phone: ${result.phone}.
Email: ${result.email}.
Message: ${result.text}.
You can also check it out in Messages section of admin area.
`,
});
},
},
};
示例2-UTF-8
import ftfy
print(ftfy.fix_text('ünicode'))
output -->
ünicode
示例3-Unicode 代码点
import ftfy
print(ftfy.fix_text('\xe2\x80\xa2'))
output -->
•
pip安装ftfy
答案 10 :(得分:-2)
import json, ast
jdata = ast.literal_eval(json.dumps(jdata)) # Removing uni-code chars