#码力全开·技术π对#在使用 Google Map API 时,如何处理字符串编码问题?例如 Tomcat 默认使用 ISO-8859-1

  • 在使用 Google Map API 时,如何处理字符串编码问题?例如 Tomcat 默认使用 ISO-8859-1 而浏览器可能用 UTF-8 或 GBK6
在使用 Google Ma
桃花键神
2025-04-28 14:25:46
浏览
1
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
AuraLife
AuraLife

#### 1. 明确编码冲突场景

环节

典型编码问题

浏览器/客户端

默认可能为 UTF-8/GBK,未显式声明编码

HTTP 传输

GET 参数在 URL 中未正确编码

Tomcat 服务器

默认使用 ISO-8859-1 解码 URI

Google Maps API

严格依赖 UTF-8 编码的请求参数

#### 2. 关键解决方案

##### 方法一:强制统一编码为 UTF-8
步骤 1:配置 Tomcat 的 URI 解码方式
修改 ​​conf/server.xml​​ 的 Connector 配置,显式指定 ​​URIEncoding="UTF-8"​​:

<Connector port="8080" protocol="HTTP/1.1"
           URIEncoding="UTF-8"  <!-- 关键配置 -->
           redirectPort="8443" />

步骤 2:前端强制 UTF-8 编码
在发送请求前,使用 JavaScript 对参数手动编码:

// 使用 encodeURIComponent 处理特殊字符
const address = "北京市海淀区";
const encodedAddress = encodeURIComponent(address); 
// 输出:"%E5%8C%97%E4%BA%AC%E5%B8%82%E6%B5%B7%E6%B7%80%E5%8C%BA"

步骤 3:后端兼容性处理
若无法修改 Tomcat 配置,可在 Java 代码中手动纠正编码:

// 将 ISO-8859-1 解码的字符串重新转换为 UTF-8
String wrongStr = request.getParameter("address"); 
String correctStr = new String(wrongStr.getBytes("ISO-8859-1"), "UTF-8");

##### 方法二:通过 HTTP Header 声明编码
在响应中强制声明 UTF-8:

// Servlet 中设置 Content-Type
response.setContentType("text/html; charset=UTF-8");
分享
微博
QQ
微信https://www.51cto.com/aigc/
回复
2025-05-01 09:55:04
发布
相关问题
提问