解决存到数据库里中文乱码问题

本文详细介绍如何在不同层面统一采用UTF-8编码,包括JSP页面、数据库连接、Tomcat服务器配置、Struts2框架及数据库设置等,确保系统的国际化和中文显示正确。
1.页面
  • 每个页面上加上  这样在jsp页面里,点右键,查看编码方式则为UTF-8.

[java]  view plain copy
  1. <%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>  

  1. <%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>  

  • 也可以把设置myEclipse中默认的contentTyepe。步骤是:windows->preferences->Generl->ContentType.然后设置成UTF-8.一定要update~~
  • 在JSP页面头部加入下面这句话,告诉浏览器应该调用UTF-8的字符集。

  1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>  

[java]  view plain  copy
  1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>  

 

2.数据库连接语句

  •  设置characterencoding为UTF-8 如jdbc.mysql.url=jdbc:mysql://localhost:3306/db?useUnicode=true&amp;characterEncoding=UTF8
  • 如果使用Hibernate,那就把所有的配置文件头部的编码格式改成UTF-8。

3.Tomcat

  •    为了保证get/post数据都采用相同的UTF8编码,我们在server.xml中进行了如下设置: <Connector port="8080" protocol="HTTP/1.1"                connectionTimeout="20000"                redirectPort="8443"  URIEncoding="UTF-8" />

4. struts2配置

  • struts2在配置struts.properties文件中加上struts.i18n.encoding=UTF-8 或者在struts.xml里加上<constant name="struts.i18n.encoding" value="UTF-8" />

在web.xml文件里配置filter 

<filter>
  <filter-name>encodingFilter</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>GBK</param-value>
  </init-param>
 </filter>
 
 <filter-mapping>
  <filter-name>encodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping> 

5.数据库(MySQL

可以先输入查询语句SHOW VARIABLES LIKE 'character_set_%';,查看所有的编码是否是UTF-8.

如果不是可以使用Server Instance Config 把默认的字符集设置为utf-8或者修改/MySQL/MySQL Server 5.0/my.ini中的default-character-set=gbk

character-set-server=gbk;

然后重新启动mysql的服务就行了

 

<think> 首先,用户的问题是:“我想查找将页面文字存储到数据库中的方法 请问如何将页面文字存储到数据库中”。这是在询问如何将网页上的文字存储到数据库中。 系统指令提醒我参考站内引用,并且用户提供了几个引用: - 引用[1]: 展示了JSP + MySQL存储文本的例子,包括设置字符编码和处理文本。 - 引用[2]: 讨论在ErlyWeb中处理中文字符,涉及将字符列表转换为二进制。 - 引用[3]: 涉及Scrapy爬取数据存储到MySQL的分页功能。 - 引用[4]: 解决MySQL + JSP的中文问题,涉及设置字符集。 用户说“上述引用仅供参考,并不是用户真正的需求”,但我的回答应该基于用户的问题,同时参考这些引用作为支持。用户上一次的问题是关于存储页面文字到数据库的,所以我需要聚焦于此。 我的回答必须: - 使用中文。 - 结构清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 - 遵循LaTeX格式:行内数学表达式用$...$,独立公式用$$...$$(但这个问题可能不涉及数学表达式,所以要避免不必要的LaTeX)。 - 生成相关问题。 - 在引用的段落末尾添加引用标识。 关键点: 1. **理解需求**:用户想将页面文字存储到数据库中。这可能包括从HTML页面提取文本并存入数据库。 2. **参考引用**: - [1] 显示了一个JSP示例,其中文本从request获取,处理后存入MySQL数据库。它处理了字符编码(如UTF-8)和替换换行符为HTML标签。 - [2] 关于转换中文到二进制,可能与数据库存储相关,但在JSP/MySQL情境下可能不是直接相关。 - [3] 涉及爬虫和分页,但核心是数据存储。 - [4] 强调字符集设置,如设置MySQL的字符集为UTF-8以避免中文乱码。 3. **核心步骤**:基于标准实践,存储页面文字到数据库涉及: - 获取页面文字:通过后台处理如Java Servlet获取request参数。 - 处理字符编码:确保使用UTF-8或其他统一编码。 - 数据库连接:使用JDBC或其他方式连接到数据库。 - SQL插入:执行INSERT语句将文本存入表中。 - 错误处理和优化:如防止SQL注入、处理大文本等。 4. **结构化回答**: - 介绍问题。 - 逐步解释存储方法: - 步骤1: 获取页面文字。 - 步骤2: 处理字符编码。 - 步骤3: 连接数据库。 - 步骤4: 执行SQL插入。 - 给出代码示例或伪代码。 - 添加注意事项,如字符集设置。 - 基于引用支持回答。 5. **生成相关问题**:在回答末尾添加相关问题,类似于示例(如关于快速排序的性能分析)。 6. **引用标识**:在回答中自然地添加引用,例如在提到字符编码时引用[4],在给出JSP示例时引用[1]。 最终回答大纲: 1. **引言**:简要解释如何将页面文字存储到数据库。 2. **步骤详解**: - 获取文字:从请求中提取文本。 - 处理编码:设置正确编码防止乱码。[^4] - 数据库连接:使用驱动程序连接数据库。[^1] - SQL执行:插入文本到数据库。[^1], [^3] - 额外处理:如处理换行符或特殊字符。[^1], [^2] 3. **代码示例**:参考引用[1]给出一个简化的代码片段。 4. **注意事项**:强调安全(如防止SQL注入)、性能(如大文本处理)。 5. **相关问题**:生成2-3个相关问题。 </think> ### 如何将页面文字存储到数据库中 将页面文字(例如 HTML 页面中的文本内容)存储到数据库中,是 Web 开发中的常见需求。核心步骤包括:获取页面文字、处理字符编码、连接数据库、执行 SQL 插入语句以及关闭资源。下面我将逐步解释这个过程,结合最佳实践和参考示例,确保方法可靠且易于实现。整个过程需注意字符编码统一(推荐 UTF-8)和安全问题(如防止 SQL 注入)。 #### 步骤 1: 获取页面文字 首先,你需要从页面请求中提取文字内容。这通常在服务器端处理(如使用 JSP、Servlet 或 Python Flask)。用户通过表单提交或其他方式传递文本时,后台代码获取参数。 - **示例**:在 JSP 中,使用 `request.getParameter("content")` 获取文本参数。 - **注意事项**:处理特殊字符(如换行符),避免存储错误。如引用[1]所示,将 `\r` 替换为 `<br />` 可保留格式:`s = s.replace("\r", "<br />");`[^1]。 #### 步骤 2: 处理字符编码 确保文本编码一致,防止中文乱码问题。Web 页面和数据库都应使用 UTF-8 编码。 - **关键操作**: - Servlet/JSP 中设置请求编码:`request.setCharacterEncoding("utf-8");`[^1]。 - 数据库连接需指定编码:URL 中添加 `useUnicode=true&characterEncoding=UTF-8`(如 MySQL JDBC 连接)。 - **数据库字符集配置**:检查 MySQL 字符集变量,确保 `character_set_client`、`character_set_connection` 和 `character_set_results` 都为 UTF-8。可使用 `SET NAMES 'utf8'` 或 `SET NAMES 'gbk'`(根据实际需求)初始化连接[^4]。如果不设置,可能存储乱码。 #### 步骤 3: 连接数据库 建立数据库连接,使用驱动程序(如 JDBC for MySQL)。资源连接后必须及时关闭,避免泄露。 - **操作流程**: 1. 加载驱动:`Class.forName("com.mysql.jdbc.Driver");` 2. 获取连接:`conn = DriverManager.getConnection(url, username, password);` 3. 创建语句对象:`stmt = conn.createStatement();` - **URL 格式**:引用[1] 示例:`jdbc:mysql://localhost:3306/book?useUnicode=true&characterEncoding=UTF-8`[^1]。这确保数据传输使用 UTF-8。 #### 步骤 4: 执行 SQL 插入 构造 INSERT 语句将文本存入数据库表。文本字段应定义为 `TEXT` 或 `LONGTEXT` 类型以支持大段文字。 - **SQL 语句示例**:如引用[1]所示:`INSERT INTO chapter VALUES ('','章节名','"+s+"',1);`[^1]。这 `s` 是处理后的文本变量。 - **安全优化**:避免直接拼接字符串以防止 SQL 注入。使用 `PreparedStatement` 代替 `Statement`: ```java String sql = "INSERT INTO chapter (column_name) VALUES (?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, s); // 安全绑定参数 pstmt.executeUpdate(); ``` - **处理大文本**:如果文本过大,数据库字段类型应为 `LONGTEXT`(MySQL)。引用[2]提到二进制转换方法,但 UTF-8 文本可直接存储,无需额外转换(除非涉及二进制数据)[^2]。 #### 步骤 5: 关闭资源并验证 执行后关闭数据库连接,并检查插入是否成功。 - **资源关闭**:在 `finally` 块中确保关闭资源: ```java try { // ...执行SQL... } finally { if (stmt != null) stmt.close(); if (conn != null) conn.close(); } ``` - **验证**:通过数据库客户端查询记录,确认文本完整存储。引用[1] 示例中检查了插入状态[^1]。 #### 完整代码示例(基于 JSP + MySQL) 参考引用[1] 简化后的代码: ```jsp <%@ page import="java.sql.*" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <% request.setCharacterEncoding("UTF-8"); String content = request.getParameter("content"); content = content.replace("\r", "<br />"); // 处理换行符 String driver = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://localhost:3306/your_db?useUnicode=true&characterEncoding=UTF-8"; String user = "root"; String pass = ""; try { Class.forName(driver); Connection conn = DriverManager.getConnection(url, user, pass); PreparedStatement pstmt = conn.prepareStatement("INSERT INTO your_table (text_column) VALUES (?)"); pstmt.setString(1, content); pstmt.executeUpdate(); out.println("文本存储成功!"); pstmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); out.println("存储失败:" + e.getMessage()); } %> ``` #### 注意事项 - **字符编码统一**:页面、服务器和数据库全部使用 UTF-8,避免中文乱码[^4]。 - **安全**:始终使用 `PreparedStatement` 防止 SQL 注入;避免直接拼接用户输入。 - **性能**:对于爬虫或大文本场景(如引用[3]),考虑分页或批处理优化存储[^3]。 - **框架选择**:除了 JSP,Python(如 Django 或 Scrapy)或 Node.js 也可实现类似逻辑,核心逻辑不变。 通过以上步骤,你可以可靠地将页面文字存储到数据库中。如果遇到乱码,优先检查各环节编码设置[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值