Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >如何将"\uxxxx“格式的utf8字符串转换为latin1?

如何将"\uxxxx“格式的utf8字符串转换为latin1?
EN

Stack Overflow用户
提问于 2013-01-28 09:31:20
回答 2查看 1.7K关注 0票数 0

我必须将一个JSON格式的字符串保存到我的latin1 mysql中。为了能够使用uft8_encode函数,我必须将整个数组转换为utf8,然后将结果字符串转换回latin1。

因此,我尝试了以下代码:

代码语言:javascript
代码运行次数:0
复制
    // $context is equal to array('produção' => 'homologação'), for testing purposes
    $context = Helper::getHelper('Util')->encodeUtf8($context); // Encodes key and value with utf8_encode

    $context = json_encode($context); // {"produ\u00e7\u00e3o":"homologa\u00e7\u00e3o"}

    $context = utf8_decode($context); // Still {"produ\u00e7\u00e3o":"homologa\u00e7\u00e3o"}

但正如你所看到的,它不像我预期的那样起作用。我也尝试过使用Zend_Json库,但它也不适用于这些字符。

以简化:需要将latin1数组编码为JSON,然后将该JSON插入到latin1 db中。

有人知道我是怎么做到的吗?一个更好的方法来完成同样的结果,也将是非常感谢的。

EN

回答 2

Stack Overflow用户

发布于 2013-01-28 09:38:32

您正在对一些不是utf8_decode的东西执行utf8

JSON编码的内容总是ASCII,所以执行utf8_decode不会有任何作用(ASCII是UTF8的子集)。您必须首先解码JSON。

正确的顺序是:

代码语言:javascript
代码运行次数:0
复制
$string = "some UTF8 string";   // utf8
$json = json_encode($string); // json
$utf8 = json_decode($json); // utf8
$latin = utf8_decode($utf8); // latin1

当然,这里的JSON步骤是不必要的,但我猜您正在使用JSON来传输或存储数据(这是个好主意!)

既然你更新了问题:

JSON是ASCII,因此将其存储在latin1编码的字段中应该没有问题。

如果希望将utf8编码的数据以latin1的形式发送给客户端,则需要在将其放入数据库之前或在取出数据之后进行一些编码转换。

我的观点是,您不需要做任何技巧来将JSON存储在数据库中。这不应成为问题的一部分。在这一点上,我仍然不清楚你想要什么。声明:

为了简化:我需要将latin1数组编码为JSON,然后将该JSON插入到latin1 db中。

与输入为utf8编码的JSON的代码示例不押韵。

票数 2
EN

Stack Overflow用户

发布于 2013-01-28 10:19:26

我有一个latin1编码数组。我必须将该数组编码为JSON,然后将该JSON存储在我的latin1 db中。我的第一个问题是json_encode只接受utf8编码的数组,所以我不得不将整个数组编码为utf8。

但真正的问题是我的分贝。当我插入JSON时,它使用"\uxxxx“序列插入文字字符串。我最初以为那些只是utf8字符,所以我试着对它们进行解码。很明显我错了。

@Frits解释说json_encode的结果是纯ascii,这给了我很多帮助,让我看到了不同的方向,我找到了解决问题的方法。

因为"\uxxxx“序列只是ascii,我真正需要的是用适当的utf8字符替换这些序列,然后解码整个字符串。

在这里解释得很好:How to decode Unicode escape sequences like "\u00ed" to proper UTF-8 encoded characters?

我对这个解决方案特别不满意,但我有最后期限。所以,如果有人有更好的方法,请和我分享。

我希望这能帮助一些处于同样情况的人。尽管它很丑,但它还是有效的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14567741

复制
相关文章
python中将 \\uxxxx转换为 Unicode字符串
今天碰到一个很有意思的问题,需要将普通的 Unicode字符串转换为 Unicode编码的字符串,如下:
渔父歌
2018/09/26
2.3K0
mysql整型转字符串_java中如何将字符串转换为字符数组
select * from A order by cast(name as unsigned);
全栈程序员站长
2022/09/27
23.3K0
[1154]如何将字符串转换为datetime
1.把datetime转成字符串: 2017-11-23 17:05:18 2.把字符串转成datetime: 2017-11-23 16:10:10 3.把字符串转成时间戳形式: 1511424610.0 4.把时间戳转成字符串形式: 2017-11-23 17:05:18 5.把datetime类型转外时间戳形式: 1511427918.0
周小董
2022/07/27
3.3K0
MongoDB:如何将 BSON 文档转换为可读的格式
二进制 Javascript 对象表示法 (BSON) 是 JSON 文档的二进制编码序列化。JSON 更易于理解,因为它是人类可读的,但与 BSON 相比,它支持的数据类型更少。BSON 已扩展为添加一些可选的非 JSON 原生数据类型,例如日期和二进制数据。
用户4235284
2023/10/14
1.1K0
字符串转时间格式
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date;
全栈程序员站长
2022/08/22
1.1K0
字符串转时间格式
encoding - 如何将 Dart 的ByteData转换为字符串?
正如 Gunter 在评论中提到的,您可以使用File.writeAsBytes. 但是,它确实需要一些 API 工作才能从ByteData到List<int>。
徐建国
2021/08/30
3.5K0
Python如何将GrADs常用文件转换为NetCDF格式?
测试数据分享 链接:https://pan.baidu.com/s/1mj1-YpvQN414crNz32f8GA 提取码:wmfr
气象学家
2022/01/18
1.8K0
Python如何将GrADs常用文件转换为NetCDF格式?
Python如何将GrADs常用文件转换为NetCDF格式?
首先需要确保xgrads库的安装: pip install xgrads Install from github 或者 git clone https://github.com/miniufo/xgrads.git cd xgrads python setup.py install 链接https://github.com/miniufo/xgrads , 有提供示例ctl和dat文件,下面我们是使用的ctl和grd文件转换的,方法类似: #import sys #sys.path.append('/home/gavin/miniconda3/envs/atmpy/lib/python3.8/site-packages') #sys.path from xgrads import CtlDescriptor, open_CtlDataset ds = open_CtlDataset('lst.ctl') ctl = CtlDescriptor(file='lst.ctl') ds.attrs['pdef' ] = 'None' ds.to_netcdf('lst.nc') data = ds.ro1 data.where(data!=ctl.undef).plot(figsize=(9,5), cmap='jet') 以上需要注意两点: 1.如果在jupyter-lab中无法加载xgrads需要手动添加其路径,使用到的是:import sys 2. xgrads存在bug,如果不添加语句ds.attrs['pdef' ] = 'None'会一直报错,无法生成nc文件!
郭好奇同学
2021/08/26
2.8K0
Python如何将GrADs常用文件转换为NetCDF格式?
如何将ipynb转换为html,md,pdf等格式
本文介绍了如何将 Jupyter Notebook(.ipynb 文件)转换为 HTML、Markdown、PDF 和 LaTeX 格式。首先介绍了 Jupyter Notebook 的入门知识,然后介绍了将 Jupyter Notebook 转换为其他格式的方法,包括使用 `jupyter nbconvert` 命令和设置 Jupyter Notebook 模板。此外,还提供了将 Jupyter Notebook 转换为 PDF 和 LaTeX 格式的方法,以及使用 ipython 命令行工具直接将 Jupyter Notebook 转换为 PDF 格式的方法。
红色石头
2017/12/28
8.2K0
如何将ipynb转换为html,md,pdf等格式
MySQL字符集终极指南--进阶篇
以下配置项是Linux系统的本地化(localization)设置,用于控制系统在不同方面如何呈现和处理数据。下面是每个配置项的解释:
DBA成江东
2023/08/14
2.2K0
MySQL字符集终极指南--进阶篇
在Bash中如何将字符串转换为小写
其中 "^" 运算符将匹配模式的小写字母转换为大写;"," 运算符将匹配的大写字母转换为小写。"^^" 和 ",," 扩展将转换扩展值中的每个匹配字符;"^" 和 "," 扩展仅匹配并转换扩展值中的第一个字符。
程序熵
2023/10/16
2340
在Bash中如何将字符串转换为小写
Oracle如何将一个数字转换为字符串并且按照指定格式显示?
在应用中,可能需要将0.007007040000转换成0.70%,或需要显示“0.00”、“1.20”等类似的数据格式,此时可以使用TO_CHAR函数来转换。这个函数可以用来将DATE或NUMBER数据类型转换成可显示的字符串,格式是TO_CHAR(number_type,format_mask),format_mask转换格式有多种,如下表所示:
AiDBA宝典
2023/08/10
1.9K0
Oracle如何将一个数字转换为字符串并且按照指定格式显示?
json字符串转换为Json对象_前端字符串转json
参考网上的文章,做了一个关于json的总结,进行留存帮助以后阅读,希望可以帮助到大家。
全栈程序员站长
2022/09/28
7.6K0
java 日期格式化– SimpleDateFormat 的使用。字符串转日期,日期转字符串
日期和时间格式由 日期和时间模式字符串 指定。在 日期和时间模式字符串 中,未加引号的字母 ‘A’ 到 ‘Z’ 和 ‘a’ 到 ‘z’ 被解释为模式字母,用来表示日期或时间字符串元素。文本可以使用单引号 (‘) 引起来,以免进行解释。所有其他字符均不解释;只是在格式化时将它们简单复制到输出字符串 白话文的讲:这些A——Z,a——z这些字母(不被单引号包围的)会被特殊处理替换为对应的日期时间,其他的字符串还是原样输出。
全栈程序员站长
2022/07/01
5.1K0
java 日期格式化– SimpleDateFormat 的使用。字符串转日期,日期转字符串
C语言中把数字转换为字符串 【转】
在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。 sprintf 是个变参函数,定义如下: int sprintf( char *buffer, const char *format [, argument] ... ); 除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数: 格式化字符串上。 printf 和sprintf 都使用格式化字符串来指定串的格式,在格式串内部使用一些以“%”开头的格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要 的字符串。 格式化数字字符串 sprintf 最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf 在大多数场合可以替代 itoa。 如: //把整数123 打印成一个字符串保存在s 中。 sprintf(s, "%d", 123); //产生"123" 可以指定宽度,不足的左边补空格: sprintf(s, "%8d%8d", 123, 4567); //产生:" 123 4567" 当然也可以左对齐: sprintf(s, "%-8d%8d", 123, 4567); //产生:"123 4567" 也可以按照16 进制打印: sprintf(s, "%8x", 4567); //小写16 进制,宽度占8 个位置,右对齐 sprintf(s, "%-8X", 4568); //大写16 进制,宽度占8 个位置,左对齐 这样,一个整数的16 进制字符串就很容易得到,但我们在打印16 进制内容时,通常想要一种左边补0 的等宽格式,那该怎么做呢?很简单,在表示宽度的数字前面加个0 就可以了。 sprintf(s, "%08X", 4567); //产生:"000011D7" 上面以”%d”进行的10 进制打印同样也可以使用这种左边补0 的方式。 这里要注意一个符号扩展的问题:比如,假如我们想打印短整数(short)-1 的内存16 进制表示形式,在Win32 平台上,一个short 型占2 个字节,所以我们自然希望用4 个16 进制数字来打印它: short si = -1; sprintf(s, "%04X", si); 产 生“FFFFFFFF”,怎么回事?因为spritnf 是个变参函数,除了前面两个参数之外,后面的参数都不是类型安全的,函数更没有办法仅仅通过一个“%X”就能得知当初函数调用前参数压栈时被压进来的到底 是个4 字节的整数还是个2 字节的短整数,所以采取了统一4 字节的处理方式,导致参数压栈时做了符号扩展,扩展成了32 位的整数-1,打印时4 个位置不够了,就把32 位整数-1 的8 位16 进制都打印出来了。 如果你想看si 的本来面目,那么就应该让编译器做0 扩展而不是符号扩展(扩展时二进制左边补0 而不是补符号位): sprintf(s, "%04X", (unsigned short)si); 就可以了。或者: unsigned short si = -1; sprintf(s, "%04X", si); sprintf 和printf 还可以按8 进制打印整数字符串,使用”%o”。注意8 进制和16 进制都不会打 印出负数,都是无符号的,实际上也就是变量的内部编码的直接的16 进制或8 进制表示。 控制浮点数打印格式 浮点数的打印和格式控制是sprintf 的又一大常用功能,浮点数使用格式符”%f”控制,默认保 留小数点后6 位数字,比如: sprintf(s, "%f", 3.1415926); //产生"3.141593" 但有时我们希望自己控制打印的宽度和小数位数,这时就应该使用:”%m.nf”格式,其中m 表 示打印的宽度,n 表示小数点后的位数。比如: sprintf(s, "%10.3f", 3.1415626); //产生:" 3.142" sprintf(s, "%-10.3f", 3.1415626); //产生:"3.142 " sprintf(s, "%.3f", 3.1415626); //不指定总宽度,产生:"3.142" 注意一个问题,你猜 int i = 100; sprintf(s, "%.2f", i); 会打出什么东东来?“100.00”?对吗?自己试试就知道了,同时也试试下面这个: sprintf(s, "%.2f", (double)i); 第 一个打出来的肯定不是正确结果,原因跟前面提到的一样,参数压栈时调用者并不知道跟i相对应
用户2038589
2018/09/06
16.8K0
integer转换为string_go 字符串转int
str := “123” // string 转 int i, err := strconv.Atoi(str) if err == nil {   fmt.Printf(“i: %v\n”,i) } // string 转 int64 i64,err := strconv.ParseInt(str,10,64) if err == nil {   fmt.Printf(“i64: %v\n”,i64) } // string 转 int32 j,err := strconv.ParseInt(str,10,32) if err == nil {   fmt.Printf(“i32: %v\n”,int32(j)) }
全栈程序员站长
2022/11/06
3.4K0
JS小知识,如何将 CSV 转换为 JSON 字符串
您可以使用 csvtojson 库在 JavaScript 中快速将 CSV 转换为 JSON 字符串:
前端达人
2023/02/17
7.8K0
JS小知识,如何将 CSV 转换为 JSON 字符串
php格式怎么转换为pdf,PHP如何将将word文件转为pdf
PHP将word文件转为pdf的方法:首先修改【php.ini】,并重启环境;然后安装微软office套件;最后配置office组件服务即可。
全栈程序员站长
2022/08/26
5.5K0
php格式怎么转换为pdf,PHP如何将将word文件转为pdf
Golang语言-- gbk转utf8
package ms2mysql import ( "bytes" "golang.org/x/text/encoding/simplifiedchinese" "golang.org/x/text/transform" "io/ioutil" ) func Decode(s []byte) ([]byte, error) { I := bytes.NewReader(s) O := transform.NewReader(I, simplifie
李海彬
2018/03/21
2.7K0
c++如何将字符串转为数组(将字符串转换为数组)
string [] imgArr=imgData.Split(new char[]{‘,’});
全栈程序员站长
2022/07/29
7K0

相似问题

将latin1转换为UTF8

50

如何将mysql latin1转换为utf8

30

latin1 + Mysql :如何将utf8转换为SOLR

116

如何将rds mysql latin1转换为utf8

13

Python将latin1转换为UTF8

31
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文