- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一个非常简单的输出语句,将其输出到一个csv文件中。它只是说明了数据的偏差余量,因此我使用的是“±”符号,因此它将读取类似“5 ft / s ^ 2±2.4%”的内容。
我正在使用Python3。我尝试了三种使用“±”符号的方法:ascii,unicode,然后直接将字符粘贴到编辑器中。见下文
val1 = 3.2
val2 = 2.4
s1 = val1 + "ft/sec^2 " + chr(241) + val2 + "%"
s2 = val1 + "ft/sec^2 " + u'\u00B1' + val2 + "%"
s3 = val1 + "ft/sec^2 ±" + val2 + "%"
3.2ft/sec^2 ±2.4%
import pandas as pd
df = pd.DataFrame(columns=['TestCol'])
df['TestCol'] = ["Test1: " + chr(241),
"Test2: " + u'\u00B1',
"Test3: " + "±"]
df.to_csv('TestExample.csv', index=False, encoding='utf-8')
TestCol
Test1: ñ
Test2: ±
Test3: ±
最佳答案
打开.csv
文件时,Excel假定Windows编码。此编码取决于语言/国家/地区,但是在英语和西欧国家/地区中,它的名称是 cp-1252
,与ISO-8859-1非常相似(也称为“latin1”)。
此编码每个字符使用一个字节。这意味着它最多允许256个不同的字符(实际上,它们少于256个,因为某些代码是为控制和不可打印的字符保留的)。
Python3使用Unicode表示字符串。 Unicode没有“仅256”个符号的限制,因为它在内部使用〜20位。实际上,Unicode可以代表世界上任何语言的任何字符(甚至包括世界之外的某些语言)。
问题在于,当必须将Unicode写入文件(或通过网络传输)时,必须将其“编码”为字节序列。实现此目的的方法之一,也是许多领域的当前标准,是“UTF-8”。
UTF-8编码每个字符使用可变数目的字节。它被设计为与ASCII兼容,因此ASCII表中的任何符号都用一个字节表示(与它的ascii码一致)。但是任何不在ascii中的字符都将需要超过1个字节来表示。特别是,字符±
(编码点U+00B1
或177)以UTF-8编码时,需要两个字节的十六进制值c2
和b1
。
当Excel读取这些字节时,由于它假定cp-1252编码(每个字符使用一个字节),因此它将序列c2
,b1
解码为两个单独的字符。第一个解码为Â
,第二个解码为±
。
注意顺便说一下,unicode ñ
(代码点U+00F1
或241)也以UTF-8编码为两个字节,值c3
,b1
,当解码为cp-1252时显示为ñ
。请注意,现在第一个是Ã
而不是Â
,但是第二个是(通常是再次)±
。
解决方案是向 Pandas 指示在写入文件时应使用cp-1252编码:
df.to_csv("file.csv", encoding="cp1252")
当然,这有潜在的问题。由于“cp-1252”最多只能表示256个符号,而Unicode最多可以表示1M个符号,因此,数据框中的某些字符串数据可能会使用“cp-1252”中无法表示的任何字符。在这种情况下,您会收到编码错误。
.csv
时,您必须指定编码,因为Pandas假定它为UTF-8。
utf-8-sig
的更新
"utf-8-sig"
编码,这将是另一种有效的(也许更可取的)解决方案。我会详细说明这是什么。
66ff
(以十六进制表示)。您必须将其“分解”为
66
和
ff
,并确定哪个首先写。磁盘中的序列可以是
66
,
ff
(称为大端顺序)或
ff
,
66
(称为小端顺序)。
ff66
,这将是另一个Unicode字符。
FEFF
组成。如果此角色是文件中的第一个字符,则在读回文件时,如果您的软件发现
FEFF
作为第一个字符,它将知道用于读取文件的字节序与编写文件时使用的字节序相同。但是,如果找到
FFFE
(交换了顺序),它将知道字节序不匹配,然后它将在读取时交换每对字节,以获取正确的Unicode字符。
FFFE
的字符,以避免在读取BOM时造成混淆。如果在开头找到
FFFE
,则表示字节序错误,必须交换字节。
EF
,
BB
和
BF
)并将其作为文件中的第一个字符写入。当您指定
utf-8-sig
编码时,这就是Python所做的。
EF
,
BB
和
BF
作为文件中的前3个字节,则可以得出结论,该文件存储在UTF-8中。这三个字节被丢弃,其余的则从UTF-8解码。
df.to_csv("file.csv", encoding="utf-8-sig")
编写csv EF
,BB
和BF
。因此,它将丢弃这些字节,并为文件的其余部分假定为utf-8。 c2
,b1
时,将其正确解码为UTF-8以生成±
EF
,
BB
和
BF
对读取它的软件毫无意义。然后,您可能会在文件开头以“虚假”字符结尾,这可能会导致问题。如果读取文件的软件采用UTF-8编码,则前三个字节将被解码为Unicode字符
FFFE
,但不会被丢弃。该字符是不可见的,宽度为零,因此无法通过任何编辑器“看到”它,但是仍然可以在其中看到它。如果读取文件的软件采用任何其他编码,例如“latin1”,则这前三个字节将被错误地解码为

,并且在文件开头将可见。
utf-8-sig
编码,以使python丢弃这三个初始字节。
关于python - 运行代码时,为什么在'±'前面打印'Â'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57061645/
很高兴和你分享一些有关写python代码的经验,简直就像是品尝一口甜甜的草莓冰淇淋。每当我开始写python代码的时候,就仿佛是开启了一段奇妙的冒险,每一行代码都是我的剧情发展,每一个bug都是我的挑
我有一张看起来像这样的 table , Date Value 01/01/2010 03:59:00 324.44 01/02/2010 09:31:00
我已尽我所能检查但未找到任何 kwds允许您在 y=a-x 上画一条线(例如 pandas )散点图(不一定是最佳拟合线)并将其带到后面(或前面)。 #the data frame ax=df.plo
我已尽我所能检查但未找到任何 kwds允许您在 y=a-x 上画一条线(例如 pandas )散点图(不一定是最佳拟合线)并将其带到后面(或前面)。 #the data frame ax=df.plo
我正在尝试在书签中使用 jquery UI 作为 slider 。并且 jquery ui 要求在普通 jquery 文件之后包含该文件。 所以到目前为止我所尝试的只是将脚本附加到 header ,同
我正在尝试将 div (.portrait_text) 添加到容器 (.gallery_container) 中: 每个图像都会添加到其相应的 .gallery_container 前面。但我也想将
因此,为了避免让自己头疼(反而制造头疼),我试图将一个字符串数组成员放在同名的结构变量前面,但它不起作用并给我一个错误:std::string {aka class std::basic_string
嗨,我的索引页面上的下拉菜单有问题,下拉元素隐藏在我的图像 slider 下方,它位于我的导航栏正下方,我希望能够看到下拉菜单元素,任何帮助将不胜感激非常感谢; 这是我的导航栏 html:
我想在 div 前面移动一个按钮。 http://demo.gbaus.com/index.html在网站中,获取报价按钮不可点击,除非您点击最底部。我希望将它移到前面,以便您可以单击它。 posot
我有一个以时隙为键的 map ,指向分配的客户。并非所有时隙都有指定的客户,它可能既稀疏又密集,所以我坚持使用 map。执行。如果存在分配,则仅存在键。 计数器从槽 1 计数到槽 x,并在每个槽检查分
我有三个 Controller 。一个是 HomeViewController 启动 BlahPageViewController 并且它是单独的页面。其他两个 Controller (BlahPag
我有一个文本区域。我可以设置它的文本 $("#mytextarea").text("foo") 我可以像这样添加到文本区域: $("#mytextarea").prepend("foo") 但是我不能
我喜欢在绘图时生成我自己的网格线,这样我就可以控制刻度线等,我正在用“hist”绘图程序来解决这个问题。 hist(WindSpeed, breaks=c(0:31), freq=TRUE,
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
当我用 Java 发送电子邮件时,如果单词“From”是任何行的第一个单词,则在该单词的开头附加一个“>”字符,我该如何阻止这种情况? 这是我的文字: The following transactio
我有这一行输出 span 标记的名称值: $(this).text($(this).attr("name")); 在“名称”值之前添加字符(特别是美元符号 ($))的最佳方式是什么。 最佳答案 尝试:
在我调用 segue 返回到以前的 View Controller 之一后,我一直在努力解决我的选项卡栏被隐藏的问题。 我读到,在segue之后, View 覆盖了标签栏。有没有办法将标签栏放在 Vi
我的目标是有一个窗口,其中背景有 2 个不同颜色的面板。它们各自覆盖屏幕的特定百分比,并且会定期变化。我通过创建一个 JSplitPane 来做到这一点。但现在我想添加一个 JLabel 在屏幕中间的
我试图让我的导航栏在滚动时出现在正文的顶部。目前它在下面,如图所示。 我还有一个抽屉导航,它在引入 ScrollView 后就停止工作了……我觉得这可能是因为当我单击“汉堡包”图标时,它实际上位于 S
我之前问过类似的问题,但可能不清楚。 我有一个在 Amazon Elastic beanstalk 上运行的 Web 服务 (tomcat 8),它运行良好。然后我在 DomainA.com 上运行网
我是一名优秀的程序员,十分优秀!