【问题标题】:How can I change the encoding in Spyder to UTF - 8?如何将 Spyder 中的编码更改为 UTF-8?
【发布时间】:2021-01-03 20:07:38
【问题描述】:

我想将 Spyder 中的编码更改为 UTF-8。

请有人解释一下我是如何做到这一点的吗?谢谢你帮助我!

编辑

def deleteDoubleValues (derivativeAngle):
    
    position = []
    cleanValues = [] #leeres Array erstellen 
    cleanValues.append(derivativeAngle[0]) 
    for i in range (len(derivativeAngle)-1):  
        
        if format(derivativeAngle[i],'.4f') != format(derivativeAngle[i+1],'.4f'):
            #i=i+1
            position.append(i)
            cleanValues.append(derivativeAngle[i+1]) 
    if format(derivativeAngle[i],'.4f') != format(derivativeAngle[i+1],'.4f'):
        position.append(i+1)
        
    return cleanValues, position

def deletePositionAccel(position,strideData):
    xAcceleration = strideData["accel x"].to_numpy()
    yAcceleration = strideData["accel y"].to_numpy()
  
    xValues = []
    yValues = []
    
    for i in range(len(position)):
        xValues.append(xAcceleration(position[i]))
        yValues.append(yAcceleration(position[i]))
  
    return xValues, yValues

当我随后在 main 中运行 def deletePositionAccel() 时,我总是收到以下错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xdf in position 1382: invalid continuation byte

我不知道为什么,因为我使用的 CSV 文件是 UTF - 8 格式的。

derivativeAngle=[ 9.88   -2.12   29.88   -2.12    9.88   16.88    9.88    4.88    9.88
   -2.12    9.88   16.88   10.88    9.88   10.88    9.88    4.88    3.88
   -2.12    9.88    3.88   10.88   10.88    9.88    9.88   10.88   10.88
   15.88   16.88   16.88   22.88   34.88   41.88   53.88   60.88   -2.12
   72.88   84.88   97.88  110.88  128.88  141.88  159.88  172.88  191.88
  203.88  222.88  241.88  266.88  272.88  297.88  303.88  322.88  303.88
  279.88  240.88  166.88   97.88   22.88  -46.12  -64.12  -90.12 -139.12
 -134.12 -164.12 -190.12   -2.12 -202.12 -226.12 -221.12 -227.12 -234.12
 -214.12 -214.12 -215.12 -215.12 -208.12 -196.12 -189.12 -183.12 -184.12
 -189.12 -183.12 -177.12 -165.12 -152.12 -146.12   -2.12 -152.12 -170.12
 -171.12 -177.12 -171.12 -177.12 -170.12 -159.12 -133.12 -108.12  -77.12
  -52.12  -27.12   -8.12   21.88   47.88   -2.12   73.88   84.88   91.88
  109.88  122.88  103.88  110.88  110.88  109.88  109.88  110.88   91.88
   78.88   66.88   53.88   47.88   34.88   29.88   -2.12   22.88   22.88
   15.88   16.88   10.88    3.88    9.88    4.88   -2.12   16.88   -2.12
    3.88  -15.12   -8.12  -15.12   -8.12   -8.12   -2.12   -8.12   -8.12
   -9.12   -8.12   -8.12   -2.12   -9.12]

这就是我的 csv - 文件的样子:

    xAcceleration=[  0.11   0.14   0.22   0.23   0.23   0.2    0.16   0.17   0.12   0.13
       0.13   0.1    0.12   0.13   0.12   0.12   0.12   0.12   0.03   0.03
       0.03   0.05   0.     0.04   0.03   0.     0.03  -0.03  -0.04  -0.07
      -0.15  -0.18  -0.14  -0.28  -0.31  -0.34  -0.52  -0.52  -0.64  -0.45
      -0.72  -0.77  -0.9   -1.12  -0.93  -0.75  -0.3   -0.54  -0.87   0.33
       1.46  -2.53  -6.01  -7.76  -5.53 -15.57 -17.11 -16.93 -18.82 -15.84
     -15.49 -15.   -14.66 -13.86 -13.09 -12.26 -11.5  -10.17 -10.17  -9.26
      -8.3   -7.19  -5.31  -4.49  -3.97  -3.12  -2.23  -1.3   -0.38   0.51
       0.75   0.99   1.63   3.33   4.19   4.86   5.23   5.6    6.16   6.95
       6.95   7.87   9.95  11.15  12.17  13.14  14.69  15.34  15.72  15.64
      15.54  15.45  15.23  14.64  14.    14.    13.02  11.84   5.01  -4.19
     -16.76  -8.5    1.82  -0.42  -1.1    0.03   0.53   0.27  -0.32  -0.46
      -0.46  -0.36  -0.09   0.09  -1.08  -0.74  -0.74  -0.43  -0.84  -0.79
      -0.84  -0.89  -0.83  -0.82  -0.85  -0.85  -0.91  -0.97  -0.94  -0.88
      -0.79  -0.73  -0.77  -0.77  -0.75  -0.76  -0.71  -0.7   -0.64  -0.66]

.

yAcceleration=[[-1.41 -1.32 -1.21 -1.13 -1.13 -1.03 -0.96 -0.86 -0.85 -0.82 -0.82 -0.74
     -0.55 -0.52 -0.46 -0.42 -0.33 -0.31 -0.21 -0.14 -0.14 -0.11  0.    0.17
      0.31  0.49  0.6   0.91  1.07  1.29  1.54  2.    2.04  1.97  2.04  2.
      2.45  2.45  2.85  3.    3.02  3.11  3.99  3.85  4.11  3.5   2.75  4.45
      5.62  5.43  1.09  8.58  9.26  7.84  4.69  4.17  6.89  8.85  7.86  6.61
      5.81  5.48  5.3   4.63  4.47  4.55  4.98  6.68  6.68  7.54  8.15  8.44
      8.6   8.57  8.54  8.41  8.2   7.76  7.45  7.58  7.44  6.98  6.62  6.53
      6.33  6.04  5.58  4.8   4.37  3.85  3.85  3.04  1.62  0.97  0.63  0.32
     -0.38 -0.76 -1.25 -2.07 -2.39 -2.47 -2.37 -1.34 -0.61 -0.61 -0.33 -0.69
      2.73  2.48  4.25  2.13  0.12  0.93  1.76  1.22  1.62  1.54  1.19  1.15
      1.53  1.07  1.15  1.47  0.67  0.66  0.66  0.63  0.13  0.11  0.01 -0.06
      0.    0.03  0.11  0.11  0.2   0.25  0.34  0.31  0.32  0.27  0.31  0.31
      0.4   0.42  0.39  0.35  0.25  0.2 ]

堆栈跟踪:

Traceback (most recent call last):

  File "C:\Users\nadin\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 3343, in run_code
    self.showtraceback(running_compiled_code=True)

  File "C:\Users\nadin\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2043, in showtraceback
    value, tb, tb_offset=tb_offset)

  File "C:\Users\nadin\Anaconda3\lib\site-packages\IPython\core\ultratb.py", line 1385, in structured_traceback
    self, etype, value, tb, tb_offset, number_of_lines_of_context)

  File "C:\Users\nadin\Anaconda3\lib\site-packages\IPython\core\ultratb.py", line 1297, in structured_traceback
    elist = self._extract_tb(tb)

  File "C:\Users\nadin\Anaconda3\lib\site-packages\IPython\core\ultratb.py", line 1278, in _extract_tb
    return traceback.extract_tb(tb)

  File "C:\Users\nadin\Anaconda3\lib\traceback.py", line 72, in extract_tb
    return StackSummary.extract(walk_tb(tb), limit=limit)

  File "C:\Users\nadin\Anaconda3\lib\traceback.py", line 363, in extract
    f.line

  File "C:\Users\nadin\Anaconda3\lib\traceback.py", line 285, in line
    self._line = linecache.getline(self.filename, self.lineno).strip()

  File "C:\Users\nadin\Anaconda3\lib\linecache.py", line 16, in getline
    lines = getlines(filename, module_globals)

  File "C:\Users\nadin\Anaconda3\lib\linecache.py", line 47, in getlines
    return updatecache(filename, module_globals)

  File "C:\Users\nadin\Anaconda3\lib\linecache.py", line 137, in updatecache
    lines = fp.readlines()

  File "C:\Users\nadin\Anaconda3\lib\codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xdf in position 1382: invalid continuation byte

注意:strideData代表导入的CSV文件。

【问题讨论】:

  • 错误信息表明正在读取的文件包含字符 ß。无法判断这是您的代码正在读取的文本文件中的代码还是数据,但我怀疑它是数据。向我们展示导致错误的代码。
  • 我已将代码添加到我的问题中。
  • 需要堆栈跟踪。没有它,很难将错误消息与代码匹配。
  • 我希望我现在已经添加了所有内容,以便您可以重建它。
  • 希望你能帮助我! :) 那会很好

标签: python utf-8 spyder


【解决方案1】:

Spyder 告诉您,您的源文件是 ISO 8859-1,也就是 Latin-1。这是 Spyder 的猜测,但可能是准确的猜测,基于评论中的名称或隶属关系或版权声明。那不是问题。 Python 解释器确实期望 source 默认为 UTF-8。但它只会在遇到错误的编码时才会抱怨,比如字符串文字。当它运行时,它不会运行。相反,它会给出错误SyntaxError: Non-UTF-8 code starting with ... but no encoding declared。当您的代码运行并读取文件时,您的错误正在发生。更改 Python 源代码的编码不会解决此问题。

您的回溯非常明确。被投诉的输入文件不是 UTF-8。无论如何,不​​是有效 UTF-8。我知道你相信它是,但是(冒着重申显而易见的风险)消息说“在解码预期为 UTF-8 的文件的过程中,在位置 1382 处遇到了一个字节序列,即不是有效的 UTF-8 字节序列。有问题的字节是 0xDF。”编码库是 UTF-8 的操作定义,所以在这个话题上总是正确的。

有可能输入的文件编码出意外,不是你认为的那个文件。

一个合理的猜测是,输入文件实际上和您的源文件一样,也是 Latin-1。在 Latin-1 中,字节 0xDF 是 ß,而我的预感是 Ä 之前的那个;但是有太多的可能性无法准确猜测。

【讨论】:

  • 我现在该怎么办?
  • 检查您的代码以确保在您认为的行上报告了编码错误。然后在文本编辑器中打开正在读取的文件并搜索 ß。您提供的数据似乎每行大约 100 字节。所以问题在第 10-15 行,显然不是。你的编辑说它是 UTF-8,我相信这一点。这就是为什么我认为某处必须涉及另一个文件的原因。但是,如果您在 IDLE 中编写一个 5 行程序,使用模块 csv 读取文件并将内容回显到控制台,您将得到更清晰的答案。
  • 你在最后一句中写的听起来不错,但我不知道该怎么做,因为我以前从未做过或听说过这个。任何地方都没有ß。我现在已经完成了以下工作:我从这个 Python 文件中复制了代码并将其粘贴到一个新的 Python 文件中。现在右下角的编码不再显示 ISO.... 但是 UTF - 8 并且我不再收到 UTF - 8 错误但出现以下错误:TypeError: 'numpy.ndarray' object is not callable 之后:xValues.append(xAcceleration(position[i] ))
  • 好的,Anaconda 似乎正在读取您的源文件以显示错误,并且在顶部的评论中被一些 Latin-1 卡住了。你的另一个问题完全不同。在引用 numpy.ndarray 之后,您有 ()。我猜问题是xAcceleration()。应该是xAcceleration[] 吗? (我不是numpy 专家。)如果您需要帮助,您需要单独提出一个问题,因为它与您提出的第一个问题无关。
  • 好的。但是你能告诉我如何解决这个新错误吗?
猜你喜欢
  • 2019-10-25
  • 1970-01-01
  • 2015-05-21
  • 1970-01-01
  • 2015-04-14
  • 2010-10-29
  • 2020-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多