将Shift_JIS转换为全角波浪号[〜]字符的UTF_8,将返回较粗的字符

时间:2019-08-19 08:18:57

标签: java character-encoding

我正在处理Shift_JIS文件并输出UTF-8文件。在文本编辑器中查看时,除全角波浪号字符[〜]外,大多数字符均按预期显示。类似于以下内容变得更厚:[]。 注意:这是个不相同的字符,我只是不知道如何在此处键入,所以我将其加粗了

当我在UTF-8文件中手动键入它时,我得到的是普通版本。

这是我的代码:

DROP TABLE TAB_MAIN
/
DROP TYPE TYPE_SYSCOL
/
DROP TYPE TYPE_USRDTE
/
DROP SEQUENCE SEQ_GENERIQUE 
/
CREATE SEQUENCE SEQ_GENERIQUE NOCACHE
/

CREATE TYPE TYPE_USRDTE AS OBJECT(
USR VARCHAR2(30),
DTE DATE,
CONSTRUCTOR FUNCTION TYPE_USRDTE( pUsr varchar2 default user, pDte date default sysdate ) RETURN SELF AS RESULT
)
/

CREATE TYPE BODY TYPE_USRDTE IS
  CONSTRUCTOR FUNCTION TYPE_USRDTE( pUsr varchar2 default user, pDte date default sysdate ) RETURN SELF AS RESULT IS
    BEGIN
       SELF.USR := pUsr;
       SELF.DTE := pDte;
    END;
END;
/


CREATE TYPE TYPE_SYSCOL AS OBJECT(

IDT NUMBER ,
CRE TYPE_USRDTE,
MDF TYPE_USRDTE,

CONSTRUCTOR FUNCTION TYPE_SYSCOL(IDT number default -1) RETURN SELF AS RESULT
)
/

CREATE OR REPLACE TYPE BODY TYPE_SYSCOL IS
CONSTRUCTOR FUNCTION TYPE_SYSCOL (IDT number default -1) RETURN SELF AS RESULT IS
BEGIN
  SELF.IDT := SEQ_GENERIQUE.NEXTVAL;
  SELF.CRE := NEW TYPE_USRDTE(user, sysdate);
  SELF.MDF := NEW TYPE_USRDTE(user, sysdate);
RETURN;
end;
END;
/
CREATE TABLE TAB_MAIN  ( COLSYS TYPE_SYSCOL, COD VARCHAR2(30) )
/

INSERT INTO TAB_MAIN(COD, COLSYS) VALUES('TESTCOL1', TYPE_SYSCOL())
/

INSERT INTO TAB_MAIN(COD, COLSYS) VALUES('TESTCOL2', TYPE_SYSCOL())
/

INSERT INTO TAB_MAIN(COD, COLSYS) VALUES('TESTCOL3', TYPE_SYSCOL())
/

INSERT INTO TAB_MAIN(COD, COLSYS) VALUES('TESTCOL4', TYPE_SYSCOL())
/

INSERT INTO TAB_MAIN(COD, COLSYS) VALUES('TESTCOL5', TYPE_SYSCOL())
/

COMMIT
/

我也尝试使用“ MS932”,也尝试不使用IOUtils。

1 个答案:

答案 0 :(得分:0)

要读取Windows制作的Shift_JIS文件,必须使用Charset.forName("Windows-31j")而不是Charset.forName("Shift_JIS")

Java区分Shift_JISWindows-31j。 Windows文档中的“ Shift_JIS”表示Java中的Windows-31J(MS932)。另一方面,AIX文档中的“ Shift_JIS”表示Java中的Shift_JIS。

Windows-31J和Shift_JIS的字符映射略有不同。例如,(在Shift_JIS中为0x8160)映射到U+301C中的Shift_JISU+FF5E中的Windows-31j。 Microsoft IME使用U+FF5E(全宽度表示字符