【问题标题】:Encoding string in UTF8 from list列表中的 UTF8 编码字符串
【发布时间】:2012-08-20 22:15:39
【问题描述】:

我在将字符串格式化为 utf-8 时遇到问题 在这个脚本中,我从 excel 文件中获取数据 然后循环打印出来,问题是 带有特殊字符的字符串显示错误。

结果我不断得到“PatrÄ«cija”而不是“Patrīcija” 似乎找不到这个问题的解决方案

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-

    import sys
    import xlrd
    import datetime

    def todaysnames():
    todaysdate = datetime.datetime.strftime(datetime.date.today(), "%d.%m")

    book = xlrd.open_workbook("vardadienas.xls")
    sheet = book.sheet_by_name('Calendar')
    for rownr in range(sheet.nrows):
        if sheet.cell(rownr, 0).value == todaysdate:
            string = (sheet.cell(rownr, 1).value)
            string = string.encode(encoding="UTF-8",errors="strict")
            names = string.split(', ')
            return names

    names = todaysnames()
    for name in names:
        print name

【问题讨论】:

  • sheet.cell().value 返回什么? unicode 字符串?一个字节串?
  • 试试 urllib.unquote(string) ,导入 urllib 使用。
  • urllib.unquote 没有改变任何东西

标签: python excel utf-8 xlrd


【解决方案1】:

我认为您的问题可能是由print 引起的。 xlrd 返回 utf8。根据控制台的编码,print 可能难以正确打印。我有时在法语 Windows(编码为 cp1252)上注意到这一点

以下问题:Python, Unicode, and the Windows console 解释了如何在 Windows 的控制台上打印 unicode char。我自己没试过,但看起来不错。

希望对你有帮助

【讨论】:

  • 从@Ever 得出的解决方案来看,我怀疑您的答案是正确的。 (但你可以稍微解释一下这个问题——这个链接对没有经验的人来说毫无用处。)
  • 好的,我试着解释一下 :) 。我没有太多时间,只是想指出@Ever 可能导致问题的原因。但像往常一样,值得在第一次花费所需的时间! ;-)
【解决方案2】:

将编码更改为iso8859_13(Baltic languages) 并修复它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 2021-09-22
    • 2016-05-31
    • 1970-01-01
    • 2012-03-05
    相关资源
    最近更新 更多