- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我制作了一个 PHP 脚本,用于生成之前由另一个进程生成的 CSV 文件。然后,必须通过另一个过程导入 CSV 文件。
旧 CSV 文件的导入工作正常,但在导入新 CSV 文件时出现特殊字符问题。
当我用 Notepad++ 打开旧的 CSV 时,它说编码是 UTF-8,而当我用它打开新的 CSV 时,它说它们的编码是“ANSI as UTF-8”。
两者有什么区别?
我怎样才能使 fopen 和 fputcsv 使用“纯”? UTF-8编码?
谢谢!
最佳答案
文件没有问题。 “ANSI as UTF-8”表示没有 BOM,但 Notepad++ 通过分析字节模式明确地将编码识别为 UTF-8。我通过创建一个包含俄语、希腊语和波兰语文本的文件并将其保存为不带 BOM 的 UTF-8 格式来对此进行测试。在这里:
# Russian
Следующая
# Greek
Επόμενη
# Polish
Więcej
我在不同的编辑器 (EditPad Pro) 中执行此操作并使用十六进制模式来确保 BOM 不存在。当我在 NPP 中打开它时,它显示编码为“ANSI as UTF-8”并且所有字符都正确显示。然后,仍然在十六进制模式下,我删除了第一个俄语字符的第一个字节。当我再次在 NPP 中打开它时,它显示编码为“ANSI”并将文本的非 ASCII 部分显示为 mojibake。 :
; Russian
¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ
; Greek
Επόμενη
; Polish
Więcej
回到EditPad,这次我添加了一个BOM但是没有修复Cyrillic字符。这次 NPP 报告编码为“UTF-8”,除第一个俄语字符外,所有内容均正确显示,如下所示。 “A1”是 UTF-8 中该字符的第二个字节的十六进制表示。它以倒置的配色方案显示以指示错误。
# Russian
A1ледующая
# Greek
Επόμενη
# Polish
Więcej
总结一下:在没有 BOM 的情况下,Notepad++ 会查找不能表示 ASCII 字符的字节,因为它们的值大于 127(或 7F
十六进制)。如果找到任何内容,但它们都符合 UTF-8 要求的模式,它将文件解码为 UTF-8,并在状态栏中报告编码为“ANSI as UTF-8”。
但是如果它发现即使有一个字节不符合 UTF-8 行,它也会将文件解码为“ANSI”,这意味着底层平台的默认单字节编码。如果您的文件已损坏,您将看到这种情况。
编辑:尽管您的文件没有它也是有效的,但是您可以通过在文件的最开头手动写入三个字节 "EF BB BF"
来添加 BOM --但应该有更好的方法。您现在如何生成内容?因为它是 UTF-8,其中某处至少有一个非 ASCII 字符;否则,NPP 会将其报告为“ANSI”。
要考虑的另一种可能性:如果您对使用 CSV 文件的进程有任何影响,也许您可以将其配置为期望没有 BOM 的 UTF-8。从技术上讲,任何可以 BOM 而没有 的 BOM 解码 UTF-8 的软件都被破坏了。 Unicode 联盟实际上不鼓励使用 UTF-8 BOM,并不是说任何人都在听。
关于php - 什么是 "ANSI as UTF-8"以及如何使 fputcsv() 生成带 BOM 的 UTF-8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1380690/
我正在寻找一个控制代码来使用 ANSI 或其他一些标准在终端中创建橙色文本,这可能吗?我只看到黄色和红色可用,我认为您不能将红色和黄色混合用于同一个角色:) 最佳答案 严格来说,不:ANSI 从未标准
我知道 \33[nC移动光标 n列向前;问题是,我不知道特定行包含多少个字符。 最佳答案 什么都没有显式 ,但是屏幕“小”,您可以使用任何光标移动命令移动到任意远的目的地,终端将通过屏幕大小限制移动。
这个问题在这里已经有了答案: Oracle Joins - Comparison between conventional syntax VS ANSI Syntax (11 个回答) 8 年前关闭。
我知道在 bash 终端中,一种可靠的变色方法是使用 ANSI 转义序列。例如: echo -e "\033[0;31mbrown text\033[0;00m" 应该输出 brown text (i
上次我检查时,说您正在使用 ANSI C 编码等同于说“这是符合 C99 的代码,其中没有任何其他内容”。现在有了 C11 和 C++11,这种区别还存在吗?它还有某种意义吗? 最佳答案 历史上,“A
我的业务逻辑包含在大约 7000 行 T-SQL 存储过程中,其中大多数都具有下一个 JOIN 语法: SELECT A.A, B.B, C.C FROM aaa AS A, bbb AS B, cc
我的业务逻辑包含在大约 7000 行 T-SQL 存储过程中,其中大多数都具有下一个 JOIN 语法: SELECT A.A, B.B, C.C FROM aaa AS A, bbb AS B, cc
我正在使用 CentOS 7 和 PHP 7.0 TERM=xterm-256color 我确实有一个彩色提示和 ls 颜色,如果我通过 --ansi然后它确实显示为彩色,但我不想总是添加 --ans
在我工作过的每家公司,我发现人们仍然按照 ANSI-89 标准编写 SQL 查询: select a.id, b.id, b.address_1 from person a, address b wh
我正在使用 Delphi RIO 10.3.3。 当我将 Ansi 字符串作为 const 数组的元素之一传递时,string() 转换对其不起作用。为了让它工作,我必须先将 VAnsiString
我正在使用 Delphi RIO 10.3.3。 当我将 Ansi 字符串作为 const 数组的元素之一传递时,string() 转换对其不起作用。为了让它工作,我必须先将 VAnsiString
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
当我在终端上调整大小时,它保持全屏显示。我想,有某种方法可以找出终端的屏幕尺寸。我怎样才能在 VT100 中做到这一点? 使用 ,当我列出文件夹时,它以蓝色显示文件夹。 (或者让我们说不同的颜色)但是
我的程序正在向某个日志文件发送characters-colored文本: echo -e "\\033[38;5;2m-->\\033[0m Starting program." | tee $Log
我刚开始使用 gsoap。我只使用 c++ 取得了 4 个小成功,但是我当前的项目限制了我设置源代码生成选项来创建纯 ANSI C(不是 c++)。我似乎无法成功调用该服务,错误返回为 0xC0000
来自 http://blocktronics.org/ 的 ANSI 文件似乎使用的是另一种 ANSI 编码,而不是我的 VT100 终端仿真器支持的编码。 如果我使用 tetraview 查看这些文
如何在 Java 中将十六进制字符串转换为 ansi(窗口 1252)以及将 ansi(窗口 1252)转换为十六进制字符串。 python(完美运行) q = "hex string value"
我用 java 编写了一个 android 应用程序来获取用户答案并将它们保存在一个文件中。问题是这个文件是以 utf-8 格式保存的。最终用户将在 IBM SPSS 中打开这些文件,这是一种适用于
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 锁定。这个问题及其答案
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicates: Floating point inaccuracy examples Is JavaScript's Ma
我是一名优秀的程序员,十分优秀!