我正在处理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。
答案 0 :(得分:0)
要读取Windows制作的Shift_JIS文件,必须使用Charset.forName("Windows-31j")
而不是Charset.forName("Shift_JIS")
。
Java区分Shift_JIS
和Windows-31j
。 Windows文档中的“ Shift_JIS”表示Java中的Windows-31J(MS932)。另一方面,AIX文档中的“ Shift_JIS”表示Java中的Shift_JIS。
Windows-31J和Shift_JIS的字符映射略有不同。例如,~
(在Shift_JIS中为0x8160
)映射到U+301C
中的Shift_JIS
和U+FF5E
中的Windows-31j
。 Microsoft IME使用U+FF5E
(全宽度表示字符~
。