在一般的日文字符表示正常的情况下正波浪线“~”任然经常会出现乱码的情况。

数据库参数NLS Database Parameters
NLS_CHARACTERSET                   JA16SJIS
NLS_NCHAR_CHARACTERSET   AL16UTF16

一:对于VARCHAR2字段
现象:在页面上输入“~”存入DB后再取出到页面时变成“?”(页面的字符设置为charset=shift-jis)
调查:
1 页面提交后在java中观察编码为/uff5e
2 java中定义一个字符变量“~”观察编码为/uff5e
3 编码为/uff5e的字符存入数据库再取出的编码为/u301c
4 用Object Browser观察数据库中字符都正常
结论:存入数据库时编码发生了变化/uff5e ---> /u301c
解决:取出数据时遍历发现/u301c就转换为/uff5e
      public String getString(int columnIndex) throws SQLException {
         // TODO: ~を変更
         String value = rs.getString(columnIndex);
         if (value != null){
              StringBuffer sbDest = new StringBuffer();
              char ch;
              for(int j= 0;j< value.length();j++){
                  ch = value.charAt(j);
                  if(ch == 0x301c){
                      sbDest.append("/uff5e"); // ~
                  }else{
                      sbDest.append(ch);
                  }
              }
              value = sbDest.toString();
         }

return value;
     }

二:对于NVARCHAR2字段
现象:在页面上输入正波浪线“~”存入DB后再取出到页面时变成反波浪线“〜”(页面的字符设置为charset=UTF-8)
用Object Browser工具察看表中的数据 发现是正波浪线“~” 编码为/u301c。(实际上用Object Browser看/u301c  /uff5e都是正波浪线)
如果用NVARCHAR2字段,那么正确的操作后可以存入/uff5e

试验用表 Products ,表中的列定义如下所示
id - VARCHAR2(10) — 产品 id
lang_id — VARCHAR2(10) — 语言 id
description — NVARCHAR2(2000) — Unicode 编码的产品描述

JDBC 允许 Java 程序访问 Oracle9i 数据库中的 NVARCHAR2 数据类型的列。Oracle JDBC 驱动程序把 SQL NCHAR/NVARCHAR2 列中的数据从本地字符集编码(UTF8 或 AL16UTF16)直接转化为 UTF-16 编码的 Java 字符串。
为此,我们需要把 Java 字符串绑定到一个 NVARCHAR2 列。下面的代码段显示了完成这项任务的代码。

// Get an Oracle preparedstatement
OraclePreparedStatement orastmt =(OraclePreparedStatement)connection.prepareStatement(
"INSERT INTO PRODUCTS VALUES(?,?,?)");
// Bind the 3rd parameter to NVARCHAR2 form so that the data is stored as unicode
orastmt.setFormOfUse(3,OraclePreparedStatement.FORM_NCHAR);
orastmt.setString(1,product.getId());
orastmt.setString(2,product.getLangId());
orastmt.setString(3,product.getDescription());
orastmt.executeUpdate();
orastmt.close();

使用 orastmt.setFormOfUse() 方法来指定列的类型是 NVARCHAR2。确保数据以Unicode 编码存储。

关于NVARCHAR2字段的操作参考:
http://www.oracle.com/technology/sample_code/tech/java/sqlj_jdbc/files/9i_jdbc/NCHARsupport4UnicodeSample/Readme.html

注意这段话:
The only difference in usage between the SQL CHAR and SQL NCHAR datatypes occur in a data bind situation.
The JDBC program must call the setFormOfUse() method to specify if the data is bound for a SQL NCHAR
datatype and it must be called before binding Java variables to SQL NCHAR datatypes.
必须先setFormOfUse再绑定变量。否则存入数据库中的仍是/u301c

日文字符中常见的乱码情况---正波浪线“~”相关推荐

  1. 处理get中的中文乱码情况

    1 最基本的乱码问题. 这个乱码问题是最简单的乱码问题.一般新会出现.就是页面编码不一致导致的乱码. <%@ page language="java" pageEncodin ...

  2. 去除IntelliJ IDEA中重复代码报灰黄色下划波浪线

    去除IntelliJ IDEA中重复代码报灰黄色下划波浪线,如下图: 解决方案:

  3. java 问号乱码_Java web中常见编码乱码问题(一)

    最近在看Java web中中文编码问题,特此记录下. 本文将会介绍常见编码方式和Java web中遇到中文乱码问题的常见解决方法: 一.常见编码方式: 1.ASCII 码 众所周知,这是最简单的编码. ...

  4. html5双波浪线怎么添加,在WPS中如何给段落添加双波浪线边框

    WPS给文章的段落添加一个很好的边框,使整个段落看起来大方有条理.推荐一种波浪边框,这种边框添加后效果感是非常不错的,看起来就像是我们平时生活中写的明信片一样.以下是学习啦小编为您带来的关于在WPS中 ...

  5. 解决idea中 thymeleaf 标签th: 报红波浪线

    错误信息 发生问题的原因 // An test code thymeleaf:prefix: classpath:/templates/ 路径为 classpath: 下面 /templates/ @ ...

  6. jsp中解决中文乱码问题(基础问题)

    在两个jsp简单页面编写中,出现了一个问题,出现了中文乱码, 本应该出现的中文显示不出来,分析如下:java编程之所以会出现说出现中文乱码是 因为:Java的内核和class文件是基于unicode的 ...

  7. 字符 字符集 编码 以及乱码

    字符: 各种文字和符号的总称,如一个符号,一个字母 字符集:表示所有字符的集合,就相当于一个二维表,收录能显示的所有的字符.常见的字符集合有ASCII,GB2312,GBK,GB18030,BIG5, ...

  8. 在visio中不借助公式编辑器在字母上方打波浪线

    在visio中直接在字母上方打出波浪线 最近写论文在visio中画图,发现了这个问题,网上其他的解决方案效果都不好,就自己尝试了一下发现可行,效果如下: 下面开始操作~ 1.菜单栏--插入--符号(注 ...

  9. python2发送http不编码_[转]Python 2.x中常见字符编码和解码方面的错误及其解决办法...

    Python 2.x中的字符编码,设计的的确不好,导致初学者,甚至是即使用Python很长时间的人,都会经常遇到字符编解码方面的错误. 下面就把一些常见情,尽量的都整理出来,并给出相应的解决办法. 看 ...

最新文章

  1. php制作曲线柱形图的框架,用GD图库生成横竖柱状图折线图的类_php
  2. java.lang包—枚举类Enum
  3. ES6的新特性(8)——数组的扩展
  4. Swift - 自定义单元格实现微信聊天界面
  5. Spring Data REST 远程代码执行漏洞(CVE-2017-8046)分析与复现
  6. android动态壁纸提取,[图]大神已提取出一加8T的动态壁纸:Android 8.0+设备均可使用...
  7. 使用工具Csvde导出域中所有用户信息
  8. 限时下载 | 132G编程资料:Python、JAVA、C,C++、机器人编程、PLC,入门到精通~
  9. AD21 DXP封装库中的keepputlayer怎么开孔
  10. 利用python第三方库过抖音小店后台滑块
  11. 两分钟读懂什么是TPS和QPS
  12. python自学网站-杭州python自学网站
  13. 如何关闭Windows Server 2012的IE增强安全配置
  14. ctypeh里的函数c语言,大满贯平台网址网址-官网首页
  15. 山西宗教文化漫谈(四)——云冈:东方艺术宝库
  16. css3控制html中图片,如何使用CSS控制前端图片HTTP请求
  17. 水花:Java的数据类型
  18. 手机app跑得快游戏自动代打程序设计
  19. 生活中最毁身体的坏姿势(转载)
  20. Docker Swarm简单教程

热门文章

  1. 基于STM32MP157的GPU编程之DRM驱动调试
  2. 树莓派3操作系统下载地址
  3. 开博尔智能android播放器C3,Kaiboer开博尔C3第九代双核智能机顶盒KIUI 7.0安卓4.4.2线刷固件 电视盒固件 开博尔...
  4. 高薪程序员面试题精讲系列96之分库分表了解吗?你项目中用到过吗?怎么用的?
  5. 总结:Revit安装失败的常见问题及解决办法
  6. JS判断客户端是否已安装ActiveX控件
  7. 【操作系统】30天自制操作系统--(14)多任务1
  8. Excel 数据导入
  9. node.js安装后输入“node -v”提示'node' 不是内部或外部命令,也不是可运行的程序的解决方法
  10. ADSafe3.5.4.721超精简汇编修改启动无提示爽歪歪直接退出版