【问题标题】:█ character string indexed in python█ 在 python 中索引的字符串
【发布时间】:2015-08-24 23:22:43
【问题描述】:

我试图在类似于myString = "███ ███ J ██" 的字符串中获取“J”的索引,所以我使用myString.find('J'),但它返回一个非常高的值,如果我将“█”替换为“M”或字母表的另一个字符我得到一个较低的值。我真的不明白这是什么原因。

【问题讨论】:

  • 我无法重现您的问题。
  • 因为它不是 ASCII 字符。例如,如果 Python 对其内部字符串使用通用 UTF8 编码方案,则此字符将由 三个 单字节代码表示:0xE2 0x96 0x88
  • 您使用的是哪个 python 版本?这可能是 python 2.x 中 unicode 处理的问题。
  • lower value=-1 因为除了 J 没有其他字母
  • @Aereaux 是的。如果您将其声明为 Unicode 字符串,即 myString = u"███ ███ J ██",则 find 可以正常工作。

标签: python string unicode ascii python-2.x


【解决方案1】:

试试myString = u"███ ███ J ██"。这将使它成为 Unicode 字符串,而不是 python 2.x 默认的 ASCII 字符串。

如果您是从文件或类似文件的对象中读取它,则不要执行file.read(),而是执行file.read().encode('utf-8-sig')

【讨论】:

    【解决方案2】:

    检查您正在使用的控制台/ssh 客户端的设置。设置为 UTF-8。

    【讨论】:

      【解决方案3】:

      检查您的编码运行:python -c 'import sys; print(sys.getdefaultencoding())'

      对于 Python 2.x,输出为 ascii,这是您的程序的默认编码。为了使用一些非 ascii 字符,开发人员预测了 unicode() 类型。你自己看。只需创建一个变量myString = u"███ ███ J ██" 并遵循它.find('J') 方法。这个 u 前缀告诉解释器它处理 Unicode 编码的字符串。然后你可以像使用普通 str 一样使用这个变量。

      我在一些应该写 UTF-8 的地方使用了 Unicode。如果您愿意,请查看this great answer 的差异。

      Unicode 是 Python 3.x 中的默认编码,所以不会出现这个问题。

      【讨论】:

      • 如果我的字符串来自文件怎么办:myFile = open("map/map1", "r") myMap = (myFiler.read())
      • 使用myFile = open("map/map1", "r") myMap = (myFiler.read().encode('utf-8-sig'))
      猜你喜欢
      • 2015-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 2014-03-17
      • 2016-12-15
      相关资源
      最近更新 更多