我们所有基于文本的文件均采用 UTF-8 或 latin-1 (Windows) 编码。我们使用的唯一“特殊字符”是德语变音符号 \xc3\xa4、\xc3\xb6、\xc3\xbc 和 \xc3\x9f。
\n\n由于不同的原因(包括历史原因,也包括“属性文件不能是UTF-8”的老问题),我们无法完全统一我们的编码。
\n\n当人们用 Java 读取文本文件并使用错误的编码时,这显然会导致错误。
\n\n如果您知道唯一可能的特殊字符是上面指出的字符,是否有一种简单、可靠的方法来检测文件是 UTF-8 还是 latin-1。
\n\n或者我是否需要将文件读取为字节数组并搜索特殊字节?
\n有谁知道Python 库可以让您以智能方式将UTF-8 字符串转换为ISO-8859-1 编码?
\n\n所谓聪明,我的意思是用“-”左右替换“\xe2\x80\x93”等字符。对于许多确实无法想到等效字符的字符,请替换为“?” (就像encode(\'iso-8859-1\', errors=\'replace\')那样)。
我正在开展一个迁移项目,将 Web 服务器层从 python 2.7.8 升级到 python 3.6.3,并且在某些特殊情况下遇到了障碍。\n当从客户端收到请求时,有效负载将使用本地传输pyzmq 现在在bytespython3 中交互,而不是str(像在 python2 中一样)。
现在,我收到的有效负载使用iso-8859-1 (latin-1)方案进行编码,我可以轻松地将其转换为字符串作为payload.decode('latin-1')并将其传递给下一个服务(svc- save-entity)需要字符串参数。
\n但是,后续服务“ svc-save-entity ”期望非 latin-1 字符(如果存在)以 ASCII 字符引用(例如éfor \xc3\xa9)而不是十六进制(例如\\xe9for \xc3\xa9)表示。
我正在努力寻找一种有效的方法来实现这种转换。任何Python专家都可以指导我吗?本质上我需要一个函数的定义decode_tostring():
payload = b'Banco Santander (M\\xe9xico)' #payload is in bytes\npayload_str = decode_tostring(payload) #function to convert into string\npayload_str == 'Banco Santander (México)' #payload_str is a string in ASCII Character Reference\nRun Code Online (Sandbox Code Playgroud)\n请的定义decode_tostring()。:) …
我浏览过网页,通过PHP文档等等,我已经看过了.
没有标准的解决方案似乎是一个荒谬的问题.如果您收到未知字符集,它有奇怪的字符(如英语引号),在那里将它们转换为UTF-8的标准方式?
我已经看到许多混乱的解决方案使用了大量的功能和检查,但它们都不会发挥作用.
有没有人提出自己的功能或总是有效的解决方案?
编辑
许多人回答说"这是不可解决的"或类似的东西.我现在明白了,但是没有人提供任何有效的解决方案,除此之外utf8_encode非常有限.有什么方法可以解决这个问题?什么是最好的方法?
我有一个托管在服务器上的多语言网站,该服务器似乎将字符编码设置为默认为iso-8859-1.
我认为我最好拥有utf-8页面并包含一个meta标签来声明这一点.不幸的是,这个元标记似乎被覆盖,页面默认为iso-8859.
德语和荷兰语页面中的许多特殊字符无法正确显示.
我是否需要尝试将服务器默认更改为utf-8或其他内容?也许我可以完全删除服务器默认值?嗯......真的不确定这里最好做什么.
任何建议都会很棒!
我不完全确定这个问题是否有意义.我正在转换从ID3标签中取出的字节数组并将其转换为字符串.ID3标签中的大多数文本框架使用ISO 8859-1编码,但它取决于框架.在任何情况下,如果您查找ISO 8859-1代码中的0x00,它将无效.
为了进一步复杂化,无论是程序员错误还是格式化不当,一些字符串以0x00结尾,而另一些则不然.
使用ISO 8859-1编码将一系列字节转换为字符串时,您是否手动检查字符串的结尾以查看它是否为空?或者编码对象将通过它用于转换的任何方法在第一时间正确处理null?此外,是否有某种函数可以规范化或"修复"空终止字符串?
当您尝试显示这些字符串时,它们无法正确显示.
我在这个特定项目中使用C#.关于ID3的一些额外信息标签:ID3规格
还是我完全误解了整件事?null终止符只是一种特定语言处理字符串的方式,它与编码无关吗?
谷歌使用UTF-8作为其非常流行的编码器的默认值.从我所看到的,他们甚至没有添加字节顺序标记.
问题是大多数扫描仪似乎仍然使用JIS8(QR 2000)而不是iso-8859(QR 2005)作为默认值,因此它主要不能使用iso-8859进行编码.
似乎utf-8是唯一的选择,即使它违反了规范.
编辑:我将使用没有ECI而没有BOM的utf-8.反对所有的规范和精神,但目前效果最好.
我一直在参加关于XML的讲座,其中写着"ISO-8859-1是一种Unicode格式".这对我来说听起来不对,但是当我研究它时,我很难准确理解Unicode是什么.
你能称ISO-8859-1为Unicode格式吗?你有什么称呼Unicode?
我构建了分析源代码的工具.这些工具必须正确读取源代码文件,特别是在字符编码方面.例如,"字符串文字中的精确字节串是什么?" (PHP文字和HTML文本).
我可能错误的理解是PHP源文件只是8位字符(也就是说,PHP引擎以这种方式读取它们,因为它们只应该包含8位字符).但是,八位字符在哪个编码?(我认为打算匹配ISO-8859-1(-x?)[有人可以引用章节和经文吗?].也就是说,变音符号是一个变音符号,对吗?接下来,可以用HTML编写PHP脚本和大多数欧洲国家的字符串/字符集直接.
但很明显,Unicode存在问题.据我所知,大多数PHP应用程序主要通过包含UTF-8字节序列的字符串来处理Unicode,这些字符串可以插入8位PHP字符串中.在此之后,如果您告诉服务器您正在生成UTF-8文本,则可以生成其HTML包含Unicode UTF-8序列的脚本.
对于上述情况,可以将PHP文件读取为8位字符文本,这似乎与我的语言相匹配.
令我困惑的是编码为UTF-8的PHP源文件(Joomla软件包有大约1800个源文件,其中大约10个是UTF-8,其余的不是).在UTF-8渲染中正确显示的任何(非ASCII)欧洲字符实际上都被编码为多字节序列.我认为这些用作UTF-8的页面将正确呈现HTML.但是,在文本编辑器中显然正确呈现的欧洲字符或其他Unicode字符的任何字符串比较都是行不通的.字符串文字不包含它们似乎包含的内容.程序员是否使用UTF-8文件,因为这是编辑提供的?他们是故意这样做的吗?或者只是一场对大多数工作无关紧要的事故?
那么,如何读取PHP源文件呢?(特别是,在什么字符编码?)一个可能的答案是,始终作为ISO-8859-1 8位代码,无论实际内容或BOM(我看到很多UTF-8 BOM标记的PHP文件).另一个答案是UTF-8,如果这样标记的话.
[我们的工具读写任意编码."普通"工具是读取文件一个字符的编码,在另一个编码中写入相同的代码点.以这种方式读取UTF-8 PHP文件会让我们在编写ISO8859-1等效文件时遇到麻烦,因为许多UTF-8代码点(例如,欧元符号)无法在ISO8859-x中编码.
编辑8月30日:我们现在检查PHP文件以查看是否具有UTF-8 BOM,或者看起来是否具有合法的UTF-8序列.在这两种情况中,我们将文件读为UTF-8; 否则我们默认将其读作ISO8859-1.我们现在保留文件编码,如果我们修改它.(正确的做法是相当多的工作).这似乎是一种安全策略,但这可能与PHP程序员所期望的不同.
我有一个cfquery标签的编码问题.
这是我的代码:
<cfquery name="query" datasource="example">
SELECT *
FROM EXAMPLE_TABLE
WHERE EXAMPLE_COLUMN = 'WORD WITH ACCENT É'
</cfquery>
Run Code Online (Sandbox Code Playgroud)
在对查询变量执行cfdump时,cfquery标记生成的sql将文本更改为'WORD WITHACCENTÉ'但我需要它为É,因为表中的值是这样设置的.有没有办法改变cfquery标签的编码?
我尝试使用cfcontent标记更改页面的编码无济于事.我也尝试使用SetLocale()而没有太多结果.
谢谢.
iso-8859-1 ×10
utf-8 ×7
encoding ×4
php ×2
python ×2
c# ×1
coldfusion ×1
http-headers ×1
id3 ×1
java ×1
python-3.6 ×1
python-3.x ×1
qr-code ×1
sql ×1
sql-server ×1
unicode ×1