python raw_input 带有包含字符串的重音符号的奇怪行为

2024-04-30

我正在编写一个程序,要求用户输入包含重音符号的输入。测试用户输入字符串以查看其是否与程序中声明的字符串匹配。如下所示,我的代码无法正常工作:


code

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

testList = ['má']
myInput = raw_input('enter something here: ')

print myInput, repr(myInput)
print testList[0], repr(testList[0])
print myInput in testList

使用 pydev 在 eclipse 中输出

enter something here: má
m√° 'm\xe2\x88\x9a\xc2\xb0'
má 'm\xc3\xa1'
False

空闲时输出

enter something here: má
má u'm\xe1'
má 'm\xc3\xa1'

Warning (from warnings module):
  File "/Users/ryanculkin/Desktop/delete.py", line 8
    print myInput in testList
UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
False

在比较两个字符串时如何让我的代码打印 True ?

此外,我注意到在相同输入上运行此代码的结果会有所不同,具体取决于我使用的是 eclipse 还是 IDLE。为什么是这样?我的最终目标是将我的程序放到网络上;由于结果似乎如此不稳定,有什么我需要注意的吗?


你遇到的是raw_input给你一个字节字符串,但你要比较的字符串是一个 Unicode 字符串。 Python 2 尝试将它们转换为通用类型进行比较,但这失败了,因为它无法猜测字节字符串的编码 - 因此,您的解决方案是显式进行转换。

通常,您应该将程序中的所有字符串作为 unicode 字符串浮动 - 您以字节形式读入的任何内容都会立即转换为 unicode;程序中作为文字的任何内容,请将其设为 unicode 文字,除非由于某种原因明确需要为字节串。这导致统一码三明治 http://nedbatchelder.com/text/unipain/unipain.html#35,这通常会让您的生活更轻松。

对于文字,您要么想要将字符串声明为u'má',或者有:

from __future__ import unicode_literals

靠近脚本顶部的位置'un-prefixed strings'统一码。您收到的错误意味着您已经完成了这一点。

要读取 unicode 字符串,您需要意识到raw_input给你一个字节串 - 所以,你需要使用它的转换它.decode方法。你需要通过.decodeSTDIN 的编码 - 可以作为sys.stdin.encoding(不要只是假设这是 UTF8 - 它经常会,但并非总是如此) - 所以,整行将是:

string = raw_input(...).decode(sys.stdin.encoding) 

但到目前为止,解决这个问题最简单的方法是升级到 Python 3(如果可以的话)——在那里,input()(其行为类似于 Py2raw_input否则)给你一个unicode字符串(它调用.decode对于你来说,你不必记住它),并且默认情况下,无前缀的字符串是 unicode 字符串。这一切都使得使用重音字符变得更加容易 - 它本质上意味着您尝试的逻辑将只是工作在 Py3 中,因为它做了正确的事情。

但请注意,您看到的错误仍然会在 Py3 中出现 - 但由于它默认执行正确的操作,因此您必须努力工作才能遇到它。但如果你这样做,比较将只是 False,没有警告 - Py3 不会尝试在字节和 unicode 字符串之间隐式转换,因此任何字节字符串总是与任何 unicode 字符串比较不相等,并且尝试对它们进行排序将抛出异常。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python raw_input 带有包含字符串的重音符号的奇怪行为 的相关文章

  • 用户警告:MovieWriter ffmpeg 不可用

    尝试在 google colab 上制作动画 收到此警告 用户警告 MovieWriter ffmpeg 不可用 warnings warn MovieWriter s 不可用 writer did pip 安装 ffmpeg 标准化但没有
  • 使用列中的日期范围扩展 pandas 数据框

    我有一个 pandas 数据框 其日期和字符串与此类似 Start End Note Item 2016 10 22 2016 11 05 Z A 2017 02 11 2017 02 25 W B 我需要将其扩展 转换为以下内容 在之间填
  • 使用 Python pdb 检查未处理异常原因的最简单方法是什么?

    我刚刚将所有单元测试数据从 JSON 转换为 YAML 现在代码中的某处引发了异常 更具体地说 这是打印的回溯 Traceback most recent call last File tests test addrtools py lin
  • 有没有纯Python的表类?

    我正在构建一个需要分析表格数据的应用程序 我想执行一些列操作 例如重命名列 删除列以及根据现有列的值计算新列的能力 我的第一选择是 Pandas 之类的东西 但是一个限制是这个项目必须是跨平台的并且非常容易在 virtualenv 中部署
  • Windows 7 64位 libsvm 和 python 错误:找不到函数“svm_get_sv_indices”

    我正在使用 Windows 7 64 位 我已经安装了 Python 2 7 3 32 位版本 和 libsvm 3 13 当我尝试启动导入 svmutil 的简单 py 文件时 出现错误 C libsvm 3 13 python gt p
  • Python 中的密码子生成

    我有这段代码 用于将 DNA 字符串转换为密码子列表 然后将此列表转换为具有各自氨基酸的字符串 然而 当我运行代码并且 DNA 字符串以一对核苷酸 例如 CT 而不是三联体结尾时 代码不会生成氨基酸序列 正如您在输出中看到的 from co
  • 为不带引号的函数获取字符串参数

    我有一个函数 用于从 URL 下载文件并将其写入磁盘 并施加特定的文件扩展名 目前 它看起来像这样 import requests import os def getpml url filename psc requests get url
  • Jupyter Notebook 找不到 IQSharp

    我一直在尝试为 Quantum Katas 运行 Q 但在找到 Q 内核方面遇到了一些困难 唯一显示的内核是用于 Jupyter Notebook 的 Python 3 内核 奇怪的是 当我执行 jupyter kernalspec lis
  • 调整pandas read_sql_query NULL值处理?

    当我做 from sqlalchemy import create engine import pandas as pd engine create engine sqlite conn engine connect conn execut
  • 确定列的累积最大值

    我正在尝试以下代码 df pd DataFrame 23 52 36 49 52 61 75 82 97 12 columns A B df C np where df A gt df C shift df A df C shift pri
  • 解码来自 S60 设备的 WBXML SyncML 消息

    我正在尝试解码来自诺基亚 N95 的 WBXML 编码的 SyncML 消息 我的第一次尝试是使用 python pywbxml 模块 它包装了对 libwbxml 的调用 用此方法解码消息会得到许多 标签以及 标签内的一大块二进制文件 我
  • Python:像石英一样的事件调度程序[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用Python处理Sqlite数据库中的换行符“\n”?

    我有一个名为 test db 的 Sqlite 数据库 其中包含两个表 其结构如下 表 1 ID 整数主键自动增量 名称 varchar 500 颜色 varchar 500 表2 ID INTEGER PRIMARY KEY AUTOIN
  • 如何使用httplib2进行相互证书认证

    我正在使用 httplib2 从我的服务器向另一个 Web 服务发出请求 我们想要使用相互证书身份验证 我了解如何使用证书进行传出连接 h set certificate 但是如何检查应答服务器使用的证书 这张票 http code goo
  • 将 tf.contrib.layers.xavier_initializer() 更改为 2.0.0

    我该如何改变 tf contrib layers xavier initializer tf 版本 gt 2 0 0 所有代码 W1 tf get variable W1 shape self input size h size initi
  • 如何让 IPython 按类别组织制表符补全的可能性?

    当一个对象有数百个方法时 制表符补全很难使用 通常 有趣的方法是由被检查对象的类而不是其基类定义或重写的方法 如何让 IPython 对其制表符完成可能性进行分组 以便首先检查对象的类中定义的方法和属性 然后是基类中的方法和属性 看起来像是
  • 在 Python 中,如果我有 unix 时间戳,如何将其插入 MySQL 日期时间字段?

    我正在使用 Python MySQLDB 我想将其插入 Mysql 中的 DATETIME 字段 我该如何使用cursor execute 来做到这一点 要将 UNIX 时间戳转换为 Python 日期时间对象 请使用datetime fr
  • 加入语音频道(discord.py)

    当我尝试让我的机器人加入我的语音频道时 出现以下错误 await client join voice channel voice channel 产生错误的行 Traceback most recent call last File usr
  • Python google云函数部署失败-Madmom pip包

    我正在尝试使用 madmom python pip 包部署 Python3 7 Google Cloud Function 但是指定madmom 0 16 1requirements txt 中的内容导致部署失败 当我从requiremen
  • 加载腌制字典对象或加载 JSON 文件哪个更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 什么更快 A Unpickling 加载 一个 pickled 字典对象 使用pickle load or B 使用以下命令将 JSON

随机推荐

  • 使用 groovy 向 jenkins 作业添加附加参数

    我们有一组 groovy 脚本 用户可以在他们的 jenkins 文件中调用它们来设置一些常见的作业属性 但是 我们无法弄清楚在进行此更新时如何保留其现有参数 我们的常规代码片段 def newParamsList def newbool
  • ios 如何验证输入的电话号码是否确实是用户的电话号码?

    我见过一些不同的应用程序 Snapchat whatsapp 等 要求用户输入电话号码 然后 系统会向用户发送一条带有代码的短信 以验证该号码是否确实是他们的号码 然后他们就可以看到哪些用户的地址簿联系人也拥有该应用程序 我了解所有这些是如
  • DateTime 以毫秒为单位的表示形式?

    我有一个 SQL 服务器时间戳 需要将其转换为自 1970 年以来以毫秒为单位的时间表示形式 我可以使用纯 SQL 来执行此操作吗 如果没有 我已将其提取到DateTimeC 中的变量 是否有可能得到这个的毫秒表示 Thanks Teja
  • 如何在 Switch/SwitchCompat 按钮中设置宽度和轨道文本并实现此结果? (附有图片和 GIF)

    我需要在我的应用程序中实现一个像这样的按钮 我使用了 SwitchCompat 按钮 但我最接近的是这一点 有两个主要问题 1 当屏幕尺寸发生变化时 按钮的宽度无法正确调整 可绘制对象被切断 变得太小等 宽度正确占据父视图 包围它的小型线性
  • C# 中是否存在异步正则表达式?它们对我的情况有帮助吗?

    我的应用程序使用正则表达式并行搜索许多文件 await Task WhenAll filePaths Select FindThings 代替FindThings 它花费大部分时间执行正则表达式搜索 因为这些文件的大小可能有数百MB sta
  • 如何从 Dart 中的 Uint8List 读取 16 位 int?

    我有一个二进制数据存储在 Uint8List 中 我想从该列表中读取一个 16 位 int 有什么方便的方法可以帮助解决这个问题吗 摘自我和同事的对话 您可以使用 ByteData 类 var buffer new Uint8List 8
  • 如何从类中排除某些字符?

    假设我想匹配一个 单词 字符 w 但排除 或匹配空白字符 s 但排除 t 我怎样才能做到这一点 使用包含 W 或 S 的否定类 W anything that s not a non word character and not S t a
  • 我需要在 header("Location: http://localhost/..."); 之后使用 exit 吗?

    我正在创建一个脚本来验证表单 并且我问自己一个问题 当我使用标头 参见下面的示例 时 我需要立即使用 exit 吗 我的意思是 使用 header 是否也意味着它默认退出 因此我不需要使用命令 exit cancel button clic
  • Vagrant 的端口转发不起作用[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我在最后遇到了一个小问题入门指南vagrant http vagrantup com docs getting started ports html
  • 可滚动 Turbo 表中的 PrimeNG 过滤器下拉问题

    在 prime ng Turbo Table 中 当我们将过滤器下拉列表放入表内的可滚动表下拉列表中时 没有可滚动表下拉菜单就完美了 这工作完美 https i stack imgur com 16vjy png 但是当可滚动表格时 下拉菜
  • gdi+ 中的半色调效果

    我该如何去模仿this http www juicybitssoftware com halftone GDI 中的半色调效果 它几乎看起来像弗洛伊德 斯坦伯格 http en wikipedia org wiki Floyd E2 80
  • Android TextView 更改文本大小后不调整大小

    我有一个ListView对该行进行一些自定义布局 一张图像 然后使用两个TextView在垂直方向上LinearLayout 参见下面的代码 我的问题是 当我动态更改文本大小时 在getView的方法Adapter 文字大小确实改变了 但是
  • Java中StringBuilder如何逆向工作?

    我正在尝试解决这个leetcode问题https leetcode com problems palindrome linked list https leetcode com problems palindrome linked list
  • java-websocket的WebSocketServer使用什么草案?

    我无法从WebSocketServer java源码 https github com TooTallNate Java WebSocket blob master src main java org java websocket serv
  • 生成实体密钥

    我第一次对 Entity Framework 4 感到失望 事实证明 当 SQL CE 与 EF4 一起使用时 不支持自动生成主键 http social msdn microsoft com forums en US sqlce thre
  • 二分图中最小顶点覆盖算法

    我正在尝试找出一种算法来查找二分图的最小顶点覆盖 我正在考虑一个解决方案 将问题减少到二分图中的最大匹配 众所周知 可以使用从 bip 创建的网络中的最大流量来找到它 图形 最大匹配 M 应确定最小匹配 顶点覆盖 C 但我无法处理选择顶点来
  • 关于 JavaScript for() 循环巫毒

    在相当长的一段时间里 我一直有这样的印象 for循环可能存在solely采用以下格式 for INITIALIZER STOP CONDITION INC DEC REMENTER CODE 然而 这是最绝对事实并非如此 看看这个 Java
  • `SwaggerRequestExample` 被忽略

    当我向 API 添加 swagger 时 我想要获取默认值和响应示例 我添加了 NuGet 包并尝试遵循本教程 https mattfrear com 2016 01 25 generating swagger example reques
  • Shell Linux:grep 带有 NULL 字符的精确句子

    我有一个像这样的文件 key 0value n akey 0value n key2 0value n 我必须创建一个以单词作为参数的脚本 我必须返回具有与参数完全相同的键的每一行 I tried grep aF key x0 但 grep
  • python raw_input 带有包含字符串的重音符号的奇怪行为

    我正在编写一个程序 要求用户输入包含重音符号的输入 测试用户输入字符串以查看其是否与程序中声明的字符串匹配 如下所示 我的代码无法正常工作 code coding utf 8 testList m myInput raw input ent