2

我正在制作一个程序,它使用带有瑞典语字符的单词并将它们存储在一个列表中。我可以在放入列表之前打印瑞典字符,但是放入之后,它们就不会正常显示,只是一堆乱七八糟的字符。

这是我的代码:

# coding=UTF-8 

def get_word(lines, eng=0):
    if eng == 1: #function to get word in english
        word_start = lines[1]

def do_format(word, lang):
    if lang == "sv":
        first_word = word
        second_word = translate(word, lang)
        element = first_word + " - " + second_word
    elif lang == "en":
        first_word = translate(word, lang)
        second_word = word
        element = first_word + " - " + second_word
    return element

def translate(word, lang):
    if lang == "sv":
        return "ENGLISH"
    if lang == "en":
        return "SWEDISH"

translated = []
path = "C:\Users\LK\Desktop\Dropbox\Dokumentai\School\Swedish\V47.txt"

doc = open(path, 'r')           #opens the documen
doc_list = []                   #the variable that will contain list of words
for lines in doc.readlines():   #repeat as many times as there are lines
    if len(lines) > 1:          #ignore empty spaces
        lines = lines.rstrip()  #don't add "\n" at the end
        doc_list.append(lines)  #add to the list
for i in doc_list:
    print i

for i in doc_list:
    if "-" in i:
        if i[0] == "-":
            element = do_format(i[2:], "en")
            translated.append(element)
        else:
            translated.append(i)
    else:
        element = do_format(i, "sv")
        translated.append(element)


print translated
raw_input()

我可以将问题简化为一个简单的代码:

# -*- coding: utf-8 -*-

test_string = "ö"
test_list = ["å"]

print test_string, test_list

如果我运行它,我会得到这个

ö ['\xc3\xa5']

4

3 回答 3

1

有很多事情需要注意:

  1. 破碎的性格。这似乎是因为您的 python 似乎输出 UTF-8,但您的终端似乎配置为某种 ISO-8859-X 模式(因此有两个字符)。我会尝试在 Python 2 中使用正确的 unicode 字符串!(总是u"ö"代替"ö")。并检查您的语言环境设置(locale在 linux 上时的命令)
  2. 列表中奇怪的字符串。在 Pythonprint e中会打印出str(e). 对于列表(例如["å"]),其实现__str____repr__. 由于repr(some_list)将调用repr列表中包含的任何元素,因此您最终会得到您看到的字符串。

示例repr(string)

>>> print u"ö"
ö
>>> print repr(u"ö")
u'\xf6'
>>> print repr("ö")
'\xc3\xb6'
于 2012-11-23T10:25:37.317 回答
1

如果您打印列表,则可以将其打印为某种结构。例如,您应该使用join()字符串方法将其转换为字符串。使用您的测试代码,它可能看起来像:

print test_string, test_list
print('%s, %s, %s' % (test_string, test_list[0], ','.join(test_list)))

并输出:

ö ['\xc3\xa5']
ö, å, å

我认为在您的主程序中,您可以:

print('%s' % (', '.join(translated)))
于 2012-11-23T10:26:37.010 回答
0

您可以使用codecs模块来指定读取字节的编码。

import codecs

doc = codecs.open(path, 'r', encoding='utf-8')           #opens the document

codecs.open使用指定编码解码原始字节后,打开的文件将为您提供 unicode 字符串。

在您的代码中,在您的字符串文字前加上u, 以使其成为 unicode 字符串。

# -*- coding: utf-8 -*-

test_string = u"ö"
test_list = [u"å"]

print test_string, test_list[0]
于 2012-11-23T10:22:49.953 回答