问题标签 [latin1]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - ajax 请求和特殊字符的 latin1/unicode 转换问题
服务器是 PHP5,HTML 字符集是 latin1 (iso-8859-1)。对于常规形式的 POST 请求,“特殊”字符(例如破折号(–))没有问题。虽然我不确定,但它确实有效。可能是因为在字符代码 150 处存在浏览器的可表示字符(这是我在服务器上的 PHP 中看到的文字 em 破折号ord
)。
现在,我们的应用程序还通过 ajax 提供了某种预览机制:将文本发送到服务器,并发送回用于预览的完整 HTML。但是,通过 ajax 发送的普通字符代码 150 em 破折号字符(使用 GET 和 POST 测试)会变异为更多内容:%E2%80%93
. 我已经在 apache 日志中看到了这一点。
根据我找到的各种来源,例如http://www.tachyonsoft.com/uc0020.htm,这是 em dash 的 UTF8 字节表示,我目前的知识是 JavaScript 处理 Unicode 中的所有内容。
但是在我的应用程序中,我需要 latin1 中的所有内容。简单地说:就像一个常规的 POST 请求会给我那个破折号作为字符代码 150,我也需要它来翻译 UTF8 表示。
那是我失败了,因为当我尝试使用服务器上的 PHP 进行解码时,utf8_decode(...)
或者iconv('UTF-8', 'iso-8859-1', ...)
在这两种情况下,我都会得到一个表示该字符的常规?
字符(并且 iconv 也会向我发出通知:Detected an invalid character in input string ) .
我的目标是找到一个自动化的解决方案,但也许在这种情况下我想变得更加聪明?
我发现其他人只是用预定义的输入/输出集进行手动替换;但这总是让我觉得我可以放松角色。
细心的读者会注意到,我在理解关于 Unicode 和字符转换的事情的全部影响/复杂性方面落后了,我绝对更喜欢将事情作为一个整体来理解,而不是简单的手动映射。
基于关于单字节字符必要性的 Delands 问题的更新:
事实是,我不知道我是否需要它。目前,我有两种方法将数据传递到服务器并返回:
客户端 latin1 -> 正常发布请求 -> 服务器上的 latin1,以 latin1 发回完整页面,字符正常
客户端 latin1 -> ajax 请求(获取或发布)-> latin1 转换为 utf8 -> 我尝试将 utf8 转换回 latin1 -> 将 latin1 HTML 片段发送到客户端以内联显示 -> 特殊字符失败
第二种方法失败,因为从 utf8->latin1 的转换不能像上面描述的那样使用 utf8_decode/icon 进行。
我的最终目标只是呈现用户输入的数据的预览。我需要服务器往返以进行 HTML 渲染和其他必须完成的数据评估。
解决方案
艾伦的答案是解决方案:latin1
被视为windows-1252
在后面,这也是 Word(至少是我的 2007 年)在它和浏览器之间复制和粘贴内容时似乎使用的。
更有趣的链接(来自 Alans 维基百科文章)是HTML 5 Syntax:
8.2.2.2:用户代理必须至少支持 UTF-8 和 Windows-1252 编码,但可能支持更多。
...
当用户代理使用下表第一列中给定的编码将内容转换为 Unicode 字符或将 Unicode 字符转换为字节时,它必须改为使用同一行第二列中的单元格中给出的编码. 当一个字节或字节序列由于这种编码别名而被不同地对待时,据说它已被误解为兼容性。
...
输入编码:ISO-8859-1 -> 替换编码:windows-1252
mysql - rails, mysql charsets & encoding: 二进制
我有一个使用 utf-8 运行的 rails 应用程序。它使用 mysql 数据库,所有表都具有 mysql 的默认字符集和排序规则(即 latin1)。因此 latin1 表包含 utf-8 数据。当然,这不太好,但我对它并不感兴趣。一切正常,因为连接编码也是 latin1,因此 mysql 不会在字符集之间转换。
只有一个问题:我需要一个表的 utf-8 全文索引:
但是:我不想在我的 rails 应用程序中的字符集之间进行转换。因此我想知道我是否可以设置 config/database.yml
连接到 mySQL 时只调用 SET NAMES 'binary'。看起来它适用于我的情况,因为我猜它会强制 mysql 在字符集(mySQL 文档)之间进行转换。有谁知道这样做的问题?有什么副作用吗?
或者你有什么其他建议吗?但我想避免将我的整个数据库转换为 utf-8。
非常感谢!本杰明
mysql - MySql varchar 从 Latin1 更改为 UTF8
在 mySql 表中,我使用 Latin1 字符集将文本存储在 varchar 字段中。由于我们的网站现在在更多国家/地区得到支持,因此我们需要对 UTF8 的支持。如果我将这些字段改为 UTF8 会发生什么?这样做是安全的还是会弄乱这些字段中的数据?将字段更改为 UTF8 时我需要考虑什么?
谢谢!
python - 在 appengine 中使用拉丁字符
如何在 appengine 中存储拉丁字符?(例如“peña”)当我想存储这个我得到这个错误:
我可以将 Ñ 更改为 N,但是,没有其他更好的方法吗?
如果我对值进行编码,如何再次打印“Peña”?
php - inserting latin1-encoded text into utf8 tables (forgot to use mysql_set_charset)
I have a PHP web app with MySQL tables taking utf8 text. I recently converted the data from latin1 to utf8 along with the tables and columns accordingly. I did, however, forget to use mysql_set_charset and the latest incoming data I would assume came through the MySQL connection as latin1. I don't know what happens when latin1 comes in to a utf8 column, but it's causing some strange display issues for items like comma, quotes, ampersand, etc.
Now that mysql_set_charset is in place, it is pulling the data out with funky characters. Any way to convert the latin1-utf8 soup to straight utf8 now that i have the database connection resource using the correct charset?
python - Python 3 阻塞 CP-1252/ANSI 读取
我正在开发一系列解析器,从我的单元测试中得到一堆回溯,例如:
这些文件是用 open() 打开的,没有额外的争论。我可以将额外的参数传递给 open() 或使用编解码器模块中的某些东西以不同的方式打开这些参数吗?
这提出了用 Python 2 编写并使用 2to3 工具转换为 3 的代码。
更新:事实证明这是将 zipfile 输入解析器的结果。单元测试实际上预计会发生这种情况。解析器应该将其识别为无法解析的东西。所以,我需要改变我的异常处理。现在正在这样做的过程中。
php - 显示为 ISO-8859-1 的 utf-8 字符
我在从数据库中插入/读取 utf8 内容时遇到问题。我所做的所有验证似乎都表明我的数据库中的内容应该是 utf8 编码的,但它似乎是拉丁编码的。数据最初是从 CLI 的 PHP 脚本导入的。
配置:
验证:
-mysql:
-数据库
-sql:在进行插入之前,我运行
-php:在进行插入之前,我使用utf8_encode()和mb_detect_encoding()这给了我“UTF-8”。在从 db 检索内容并将其发送给用户之前,mb_detect_encoding() 也给出了 'UTF-8'
验证测试:
正确显示内容的唯一方法是将内容类型设置为拉丁文(如果我嗅探流量,我可以看到带有 ISO-8859-1 的内容类型标头):
该测试显示内容以拉丁文形式出现。我不明白为什么。有人知道吗?
谢谢。
php - 如何检测非西方字符?
我想禁止某些 UTF-8 输入(服务器端),例如东方语言,其中示例输入可能是“伊”。
但是,我确实想继续支持其他拉丁语或“类似拉丁语”的字符,例如威尔士语 ŵ 和 ŷ,因此无法检查 latin-1。
我有哪些选择?(如果特定于语言,首选 PHP)
非常感谢。
推理:经常缺少对许多非西方字符的浏览器支持(例如,在不同的浏览器上,我只在上面的问题中看到一个框),因此对于显示名称之类的事情,有时即使它不适合限制它也是合适的消息体
php - 我已将 php-mysql-apache 设置为在 latin1 上工作,但是在进行备份时,我的字符集客户端仍然是 utf8
是的,我知道你的想法,但目前我们决定选择 latin1。
这是 mySQL 配置: • mysql> SHOW VARIABLES LIKE 'character_set_%';
• +--------------+--------+
• | 变量名 | 价值 |
• +--------------+--------+
• | character_set_client | 拉丁语1 |
• | 字符集连接 | 拉丁语1 |
• | 字符集数据库 | 拉丁语1 |
• | 字符集结果 | 拉丁语1 |
• | character_set_server | 拉丁语1 |
• | 字符集系统 | utf8 |> 这是无法更改的,因为它是默认系统参数。
对于 php,我们在 php.ini 中使用以下命令:
mssql.charset = "ISO-8859-1"
对于 apache,通常:
AddDefaultCharset ISO-8859-1
每次备份时,我们都会在每个表中添加以下内容:
/*!40101 SET @saved_cs_client = @@character_set_client /;
/ !40101 SET character_set_client = utf8 */;
为什么 character_set_client 仍然在 utf8 中用于 apache/php 和 mysql 之间的连接?