V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  chinaguaiu  ›  全部回复第 3 页 / 共 9 页
回复总数  165
1  2  3  4  5  6  7  8  9  
77 天前
回复了 datocp 创建的主题 iPad 大学上课做笔记请问 iPad 该怎么选择
买 mini 吧,进可做笔记,退可打游戏
80 天前
回复了 yuey286 创建的主题 计算机 这套电脑配置单如何 总价 1.4w
硬盘和内存是不是小气了点
xbox 原装。后来摸了一下同事买的 300 多的北通,很辣鸡。
83 天前
回复了 gomorebug 创建的主题 职场话题 大三下找实习 | 简历求狠批
项目经验多写点,多写设计思路和细节。技能特长写少一点吧,哎,看见这些就头大。
83 天前
回复了 tiRolin 创建的主题 Java maven 总是无法正确导入依赖问题求解答
有可能是废文件导致的。到本地的 maven 仓库删掉对应的包文件夹可以强制让 maven 在下一次拉依赖时重新下载更新。例如 fastjson 在:C:\Users\用户名\.m2\repository\com\alibaba\fastjson\2.0.2

你可以某个版本号的文件夹删了,或者直接把 fastjson 这个文件夹删了,或者更激进一点把 alibaba 这个包删了,甚至 com 包、repository 。总之,这样做相当于把本地 maven 仓库缓存的文件删掉,有时候 maven 拉取依赖失败了会在本地仓库留下废文件占用了名称路径,这时候就需要使用这种方法手动清理废文件。
@rookiemaster #18
utf-32 类型的话,框架和浏览器都可能会出现问题,可能需要逐一排除。


框架问题
-----------
utf-32 这个编码类型用的比较少,开发者一般是直接使用 utf-8 的,所以你首先还是需要通过抓却流量确定框架真的按照你指定的 utf-32 格式进行了编码。windows 下建议使用 Wireshark 工具进行抓取分析。
我模拟帮你抓取了一下流量,如下代码和配置下:

// 配置:server.servlet.encoding.charset=utf-32
// server.servlet.encoding.force-response=true
@GetMapping("/hello-encode")
public String sayHelloByString() {
return "你好,世界。";
}

抓取到的流量分析出来框架没有直接使用 utf-32 进行编码,而是使用了 utf-32be 进行编码;同时,该报文中的 Content-type 仍然指定 charset=UTF-32 ,显然导致了浏览器乱码问题(浏览器是按照 charset 指定的格式进行解码的,除非格式不支持)。我的环境是 spring-boot 3.1.5 。


浏览器问题
-----------
如果确实框架确实使用了你指定的格式进行编码并且发送数据到浏览器,才进一步考虑浏览器是否支持该编码类型;如果该浏览器不支持报文中 charset 字段指定的编码类型,那么浏览器会忽略掉 charset 字段并按照算法选取一个编码格式进行解析,显然,也容易出现乱码。各家浏览器对这个默认选取的编码格式不一样,你可以在 F12 的开发者工具控制台中输入 document.charset 或者 document.characterset 查看当前使用的编码。

我使用谷歌浏览器,上述所说的响应报文返回到浏览器后发生了乱码,我在控制台输入 document.charset 显示编码类型为 windows-1252 ,显然我的浏览器不支持 utf-32 类型。
@chendy 我钻牛角尖研究过,

对于 2:是否带上 charset 字段已经成了历史遗留问题,大部分浏览器的做法是符合规范的话就适用 charset 字段指定的编码,如果不符合规范(例如说对图片类型数据也指定了 charset),就忽略(无论有没有填上 charset 字段)。见 https://datatracker.ietf.org/doc/html/rfc6657#page-3 , 该建议标准提到应尽量弱化媒体类型(尤其是 text/*类型)对 charset 字段的依赖。

对于 3:JSON 文件强制使用 UTF-8 编码。见 https://www.rfc-editor.org/rfc/rfc8259.html#section-8.1 ,"JSON text exchanged between systems that are not part of a closed ecosystem MUST be encoded using UTF-8 [RFC3629]."
先说结论:charset 字段不对 application/json 类型的媒体内容生效,无论你怎么设置 charset ,框架都只会使用 utf-8 对字符串进行编码。charset 字段只用于 text/* 类型的媒体内容生效,也就是文本内容; application/*类型的数据在规范上属于二进制数据,不应受 charset 制约(框架和浏览器会直接忽略 charset )。

如果一定要用 GBK 传输数据,不要给 Spring 框架返回 Collection 例如 Map 类型,而是直接返回 String 类型。无论是返回哪种类型都不需要你手动进行编码了,框架会自动处理的。

// @RestController 注解会自动将 map 转化为 json 并使用 utf-8 编码
// http 响应的媒体类型为 application/json
@GetMapping("/hello-json")
public Map sayHelloByJSON() {
Map map = new HashMap<String, String>();
map.put("你好", "世界");
return map;
}

// 按照指定的编码传输文本数据
// http 响应的媒体类型为 text/*,具体类型要看框架的处理
@GetMapping("/hello-gbk")
public String sayHelloByGbkString() {
return "你好,世界。";
}


-------
1. charset 字段对 text/*文本类型的影响,见: https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types
"例如,对于主类型为 text 的任何 MIME 类型,可以添加可选的 charset 参数,以指定数据中的字符所使用的字符集"

2. JSON 文件(文本)应该使用 applicaiton/json 媒体类型进行描述,见: https://www.iana.org/assignments/media-types/media-types.xhtml 。使用 text/*类型描述 json 文本被认为是违反规范的。

3. applicaiton/json 类型的数据不应受 charset 字段影响,见: https://datatracker.ietf.org/doc/html/rfc6838#section-4.2.1
该段有提到两点:
( 1 ). 包含“payload”的文本类型不应该使用 charset 字段,而应该由本身的规范指定(例如 xml 文件内部有编码集指定字段, 而 JSON 文件唯一指定为 utf-8 , 见 https://www.rfc-editor.org/rfc/rfc8259.html ),它们不应该受 charset 字段影响(直接忽略 charset,无论 charset 是否存在)
( 2 ). 如果一定要使用一种默认编码,使用“UTF-8”。
application/json 数据其实算是二进制数据,但是可以认为是上文所说"包含`payload`的文本类型".
------


嘛,应该挺多人对 json 数据胡乱进行处理的,乱码嘛,正常。
op 有兴趣的话可以看看这个讨论: https://github.com/libwww-perl/HTTP-Message/pull/90
讨论核心就是应该如何看待并处理 http 请求中的 json 类型"文本"(从浏览器和框架的角度)。对本问有一定的参考意义。
支持。
---
"基于 drawio 开发", 这个插件是离线可用的吗?
听说洗烘一体不是很实用。op 对烘干衣物有强烈需求吗?
103 天前
回复了 pianjiao 创建的主题 职场话题 还在上班的举手🙋‍♂️
今天的地铁空落落~
104 天前
回复了 Dorathea 创建的主题 科技 一件小事突然让我有点感慨
@murmur #10 你说的这些问题毕竟是一些娱乐向的问题...拿 gpt 来跑这些内容其实和跑哲学问题也没有区别。gpt 此时的作用可以类比为一个"思维沙盘",到最后实际上就是你自己说服自己罢了...
104 天前
回复了 Dorathea 创建的主题 科技 一件小事突然让我有点感慨
@Dorathea #8 懂你意思了。某些科技发展确实会带给人一些心态上的改变,尤其是从业人员。gpt 这个东西暂时对现实生活的影响我感觉还不是很大,毕竟它就只是个生成式 ai ,是被动地生产内容的,现在还是程序员用的多,有点"春江水暖鸭先知"的意思。

实际上目前市场发展的趋势是其它类型的 AI 数量会比生成式 AI 多很多,见: [吴恩达 2023 斯坦福最新演讲:AI 新机遇-哔哩哔哩] https://b23.tv/rvQ1aVx 在视频两分钟左右有提到。

其它类型的 AI 可能对现实生活的影响会首先到来。例如说语音 AI ,最近接的推销广告的电话很多都是机器人给我打来的了,让我对推销电话更加厌恶了。
104 天前
回复了 Dorathea 创建的主题 科技 一件小事突然让我有点感慨
@timewarp 论深度论广度没人比得过他
<<<
神话太过了
104 天前
回复了 Dorathea 创建的主题 科技 一件小事突然让我有点感慨
https://i.imgur.com/U3hKhrT.png 你刷 leetcode 的最终目的在哪里呢?如果是为了面试八股文,那么 gpt 没有用;如果是锻炼个人能力,那么 gpt 也没有用。

如果是为了解决实际问题,那么你不需要上 leetcode 。
@AtlantisZ #6
其实也可以委托中介帮忙转租,但是希望也不大,因为佣金不高。

<<<
😰我和中介聊过,他说这个价位给开发商或者商业二房东推广能拿更高的佣金(不知道他们是怎么算钱的),所以中介一般来说是不会优先帮你推广房子的。比如说你的房间在一所公寓,你隔壁是同公寓的一间空房,那么中介会优先带人去隔壁的空房子看,因为开发商许诺了更高的佣金。
@AtlantisZ #4 只是一个宣传途径而已,小红书和抖音展示房子信息也比较直观友好。其实也可以委托中介帮忙转租,但是希望也不大,因为佣金不高。
这个价格转租的希望不大,楼主其实可以考虑不要押金直接跑了。或者发发小红书或抖音看看。
1  2  3  4  5  6  7  8  9  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3395 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 30ms · UTC 10:26 · PVG 18:26 · LAX 03:26 · JFK 06:26
Developed with CodeLauncher
♥ Do have faith in what you're doing.