【问题标题】:.format() returning the result and Â.format() 返回结果和 Â
【发布时间】:2021-05-17 23:17:20
【问题描述】:

我在 Raspberry Pi 网站上做一个项目,并且正在跟踪 ISS。然后,我开始玩它,让运动变为现实,并将位置放在左下角(纬度和经度)。

我创建了一个函数来将十进制度转换为度 (°) 分 (') 和秒 (") - 一种更易读的格式:

def to_hr(d):
  d = float(d)
  mod = d%1
  min_ = int(mod*60)
  sec = int(mod*36000%60)/10
  d = int(d)
  deg = d
  return "{}° {}' {}\"".format(deg, min_,sec)

然后我用turtle.write()把经纬度显示在屏幕上:

text1 = "Lat: {} Lon: {}".format(to_hr(lat), to_hr(lon))
text.color((110, 250, 85))
style = ("Arial", 7, "bold")
text.clear()
text.goto(-175, -85)
text.write(text1, font=style)

text 之前定义为 turtle.Turtle()

我不认为这是turtle.Write() 函数。我认为这是不确定的结果。

预期输出:

-7° 3' 45.1"

153° 9' 36.5"

0° 0' 0"

-34 5' 6"

实际输出:

-7° 3' 45.1"

153° 9' 36.5"

0° 0' 0"

-34° 5' 6"

有谁知道它为什么这样做?在return 中,我没有在返回中提到这个'Â' 字符(Unicode 是U+00C2),它不应该出现在结果中。我将d 设为整数,deg 也是。

【问题讨论】:

  • 您的模板使用 UTF-8,但您的输出似乎使用 latin-1。注意"{}° {}' {}\"".encode().decode('latin-1') == '{}° {}\' {}"'
  • 所以,我必须添加.encode()?如果是这样,在.format()之前还是之后?

标签: python python-3.x


【解决方案1】:

正如有人评论的那样,您的终端使用 latin-1(或 iso-8859-1),而您的海龟正在编写 utf-8。您可以按照建议对输出进行编码。甚至可以通过使用 locale.getdefaultlocale() 而不是硬编码来使其可移植。

但您也可以将语言环境设置为 utf-8。我从您的 StackOverflow 配置文件和您将其设置为 fr_CA.iso88591 的问题中猜测。如果您将其更改为fr_CA.utf8,它应该可以解决您的问题。如果我没记错的话,iso-8859-1 中的所有代码点都在 utf-8 中输出相同的字形,那么当您切换到 utf-8 时,您输出 iso-8859-1 的任何其他软件都应该继续工作......而 utf -8 有表情符号,所以赢了...

How can I change the locale? 在树莓派上

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    相关资源
    最近更新 更多