powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Смена кодировки файла из-под java
52 сообщений из 52, показаны все 3 страниц
Смена кодировки файла из-под java
    #33138985
Sender
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем!
Как можно сменить кодировку текстового документа из-под java, чтобы после этого при выводе(в java) содержимое осталось тем же(русским)? А то меня уже клинит!=(
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33138992
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не ясно чего именно надо? Запишите данные из файла в другой файл с новой кодировкой, а затем переименуйте из?
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33139039
Sender
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Верно, в принципе. Мне для xml-файла нужно, чтобы потом вставить в субд oracle, использую кириллицу1251.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33139082
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты читаешь локально XML и кладешь его в базу? Погляди, вдруг поможет: Чтение/запись файлов через Java
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33139096
АБ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык елы-палы, если это XML то какая разница? Вся работа с XML по идее строится на том, что в заголовке файла указывается кодировка, и при считывании все автоматом переводится во внутреннее представление в UTF-8. При выводе, опять же, надо указать желаемую кодировку или по умолчанию пойдет UTF. Работать с XML как с текстовым файлом -- моветон-с.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33139108
Naug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АБ - яву не колышет какая там кодировка указана в загаловке xml - по умолчанию она всё читает в своей дефолтовой кодировке(зависит от системы) поэтому при io файлов надо указывать кодировку в которой они находятся.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33139179
Sender
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, Denis Popov, пока локально. Хорошо, посмотрю и попробую. Потом изложу. А насчет кодировки: есть xml-документы(дали мне их) с charset windows-1251(стандартная), и база с charset CLMSWIN1251. Тут мне еще другое не совсем ясно(в плане кодировок). Где-то на сайте про 1251 написано, что "я" (маленькая) с кодом 0xff, из-за нее могут быть проблемы при работе некоторых приложений из-за отсутствия 8 бита(т.е., я так понимаю,от 0 до 127, а не просто 8 бит установлен или нет). В моем случае при вставке ругается на "я". Но ведь 1251(0-255, 255-это "я") и CL8MSWIN1251 тоже байт до 255. Oracle9i(R1) ведь перекодирует символы входящие в свою кодировку. Хотя с другой стороны он их берет как 2 байта. Да, АБ, но если в utf, а затем снова в 1251, то может получится ХЪГШГИТЬА(что-то вроде этого). Например, при создании объекта String (на java) указываешь ему массив байтов и нужную кодировку(при преобразовании 1251->utf-8, например, но в этом случае будет набор вопросов).
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33140610
Winder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А pl/sql в коде java использовать можно, как, например:
executeUpdate("declare
a SYS.XMLType
...
begin
...
end")?
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33140726
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно, через CallableStatement.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33143813
Sender
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слушай, Denis Popov, а в XMLType можно вставить док-т, указав его лок-ый адрес? Тоже бы очень здорово пригодилось!!
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33143816
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SenderСлушай, Denis Popov, а в XMLType можно вставить док-т, указав его лок-ый адрес? Тоже бы очень здорово пригодилось!!
А точнее: откуда, куда и чем надо загрузить в XMLType? ИМХО самое простое - положить документ в переменную типа CLOB в базе, а потом на его основе создать экземпляр XMLType - там есть соответствующий конструктор.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33145362
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
положить документ в переменную типа CLOB в базе пока еще не пробовал.(Я же Sender) Про callableStatement не знал, хотя часто попадалось на глаза. Кстати, до сих пор бьюсь над более ранней проблемой, просто пришлось ее забросить из-за нехватки времени да сил тоже. Не в тему, немного. Я насчет работы с полями LOB(CLOB). Код(начало):
Код: plaintext
1.
2.
3.
res=stmt.executeUpdate("create table test(id number not null,cdoc clob)");
res=stmt.executeUpdate("insert into test(id,cdoc) values(1,EMPTY_CLOB())");
rs=stmt.executeQuery("select cdoc from test for update nowait");
Можно сказать, делаю как по шаблону. Выдает fetch out of sequence. IntelliJidea(где я обычно программлю) выдает: выборка из последовательности.
Если без "for update nowait" то, при вставке в это поле, оно выдает, что данное поле(содержащее lob) должно быть заблокировано, но ведь ссылку получить надо.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33145451
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
 import  oracle.jdbc.OracleTypes;
 import  oracle.sql.CLOB;

 import  java.sql.*;

 public   class  ClobTest {

   private   static   final  String USERNAME = "<username>";

   private   static   final  String PASSWORD = "<password>";

   private   static   final  String SERVER = "jdbc:oracle:thin:@<host>:<port>:<SERVICE_NAME>";

   private   static   final  String RESOURCE = "ЙЦУКЕНйцукенQWERTYqwerty";

   public   static   void  main(String args [])
     throws  Exception {
    Connection con =  null ;
    Statement st =  null ;
    CallableStatement cst =  null ;
    ResultSet rs =  null ;
     try  {
      DriverManager.registerDriver( new  oracle.jdbc.OracleDriver());
      con = DriverManager.getConnection(SERVER, USERNAME, PASSWORD);
      con.setAutoCommit(false);
      st = con.createStatement();
       try  {
        st.execute("drop table test_lob");
      }  catch  (SQLException e) {}
      st.execute("create table test_lob (test_lob_id number(9), cdata clob)");
      
      // Первый способ
      CLOB clob = CLOB.createTemporary(con, true, CLOB.DURATION_SESSION);
      clob.putChars( 1 , RESOURCE.toCharArray());
      cst = con.prepareCall("insert into test_lob (test_lob_id, cdata) values (1, ?)");
      cst.setClob( 1 , clob);
      cst.execute();
      // Второй способ
      cst = con.prepareCall(
        "begin\n" +
        "  insert into test_lob (test_lob_id, cdata)\n" +
        "  values (2, empty_clob())\n" +
        "  return cdata into ?;\n" +
        "end;"
      );
      cst.registerOutParameter( 1 , OracleTypes.CLOB);
      cst.execute();
      clob = (CLOB) cst.getClob( 1 );
      clob.putChars( 1 , RESOURCE.toCharArray());
      cst = con.prepareCall("update test_lob set cdata = ? where test_lob_id = 2");
      cst.setClob( 1 , clob);
      cst.execute();
      // Проверка
      rs = st.executeQuery("select test_lob_id, cdata from test_lob");
       while  (rs.next()) {
        clob = (CLOB) rs.getClob("cdata");
        System.out.println(
          rs.getInt("test_lob_id") + " " + clob.getSubString( 1 , ( int )clob.getLength())
        );
      }
    }  finally  {
       if  (rs !=  null ) { rs.close(); }
       if  (cst !=  null ) { cst.close(); }
       if  (st !=  null ) { st.close(); }
       if  (con !=  null ) { con.close(); }
    }
  }
}
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33146934
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробовал 1 способ, получось. 2 чуть позже.
Кстати, а getlength() получается ограничен , т.е., если записать больше данных (строку из 100 символов или xml порядка kb) он выдаст не все, но спасает getchunksize(размер используемых порции данных). Тут тоже тонкость?
Кстати, не помню, после чего именно, но может после изменения кодировки файла по-умолчанию(systemdefault), а потом возврат в исходное состояние русские буквы документа, используя поток i/o стали выдаваться "?" то что на русском(в консоли java),хотя до этого было нормально. Нарушение кодировки консоли?
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33147736
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SoberПробовал 1 способ, получось. 2 чуть позже.
Кстати, а getlength() получается ограничен , т.е., если записать больше данных (строку из 100 символов или xml порядка kb) он выдаст не все, но спасает getchunksize(размер используемых порции данных). Тут тоже тонкость?

clob.getLength() возвращает long , ограничение его только в этом. В методе clob.getSubString() размерность имеет тип int , максимальное его значение может быть Integer.MAX_VALUE=2147483647. По-моему для большинства случаев хватит, тем более что в String ты все равно больше не запихнешь. Если же CLOB получился большего размера - пиши его куда-нибудь, в поток, к примеру. Читать можешь чанками, а можешь сам определить размер порции.
Sober
Кстати, не помню, после чего именно, но может после изменения кодировки файла по-умолчанию(systemdefault), а потом возврат в исходное состояние русские буквы документа, используя поток i/o стали выдаваться "?" то что на русском(в консоли java),хотя до этого было нормально. Нарушение кодировки консоли?
Поясни, приведи пример файла.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33150383
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблему с выдачей вопросов обошел, используя объект String с парамерами массив байтов и стан.кодировка win1251(перекодировка), но тот код приведу:

File inXML=new File("d:\\Dima\\oa_meteor_Planeta.xml");
InputStream inX=new FileInputStream(inXML);
inX.read(buf);int i=0;cmd="";
while (buf !=0){cmd+=(char)buf;i++};
System.out.println("XML-document:\n"+cmd);cmd=null;

Но все же выдает (содерж.clob) на 3/4:
String outs=clob.getSubString(1,(int)clob.getChunkSize());
cmd=new String(outs.getBytes(),"utf-8");
System.out.println("The field clob contains\n"+clob.getChunkSize()+"\n"+cmd);

Вот один из xml, которые в базе:

<?xml version="1.0" encoding="windows-1251"?>
<metaData xmlns="http://www.wmo.ch/www/metadata"><metadataFileIdentifier>http://cliware.meteo.ru/egfd_catalog/metadata/oa_goms_Planeta.xml</metadataFileIdentifier><metadataLanguage>ru</metadataLanguage><metadataContact><organisationName>ГУ Всероссийский НИИ гидрометеорологической информации - МЦД</organisationName><role>user</role><individualName>Хохлова Анна Владимировна</individualName><positionName>Зав. Отделом аэрологии</positionName><contactInfo><phone><voice>+7(08439)74-680</voice></phone><address><city>Королева,6 г.Обнинск</city><administrativeArea>Калужская</administrativeArea><postalCode>249035</postalCode><country>РОССИЯ</country><electronicMailAddress>anna@meteo.ru<;/electronicMailAddress></address></contactInfo></metadataContact><metadataDateStamp>2005-06-07</metadataDateStamp><metadataStandardName>WMO19115</metadataStandardName><metadataStandardVersion>0.2</metadataStandardVersion><identificationInfo><citation><resourceTitle>Государственный фонд Росгидромета. Спутниковые данные.</resourceTitle><resourceIdentifier>Монтажи спутниковых изображений (GOMS)</resourceIdentifier></citation><abstract>До 1998г. фотомонтажи спутниковых изображений из НИЦ "Планета" поступали на фотопленках. Начиная с 1998г. монтажи поступают на новых технических носителях (CD ROM). На них представлены монтажи спутниковых изображений, полученных с полярно-орбитальных или геостационарных спутников. Монтажи сопровождаются отдельными файлами, содержащими информацию о времени наблюдений.</abstract><pointOfContact><organisationName>ГУ Всероссийский НИИ гидрометеорологической информации - МЦД</organisationName><role>custodian</role><individualName>Шакирзянов Идрис Закирзянович</individualName><positionName>Начальник центра метаданных</positionName><contactInfo><phone><voice>+7(08439)74-158</voice><facsimile>+7(095)255-22-25</facsimile></phone><address><city>Королева, 6 г.Обнинск</city><administrativeArea>Калужская</administrativeArea><postalCode>249035</postalCode><country>РОССИЯ</country><electronicMailAddress>idr@meteo.ru<;/electronicMailAddress></address><onlineAddress>www.meteo.ru</onlineAddress></contactInfo></pointOfContact><resourceMaintenance><maintenanceAndUpdateFrequency>annually</maintenanceAndUpdateFrequency></resourceMaintenance><spatialRepresentationType>bitmap</spatialRepresentationType><dataCharacterSet>8859part5</dataCharacterSet><topicCategory>satelliteObservation</topicCategory><topicCategory>imageryBaseMapsEarthCover</topicCategory><descriptiveKeywords>Наблюдение</descriptiveKeywords><descriptiveKeywords>Спутник</descriptiveKeywords><referenceDate><date>1980-01-01</date><dateType>creationDate</dateType></referenceDate><dataExtent><geographicElement><geographicIdentifier>Европейская и Евроазиатская территории</geographicIdentifier></geographicElement></dataExtent><dataExtent><temporalElement><beginDateTime>1980-01-01</beginDateTime><dataFrequency>continual</dataFrequency></temporalElement></dataExtent></identificationInfo><distributionInfo><distributionFormat><formatName>jpg или raw</formatName></distributionFormat><transferOptions><offlineMedium>cdRom</offlineMedium></transferOptions></distributionInfo></metaData>

Да и почему-то "И" он преобразовывает, т.е. вместо нее "??". Т.е, например, вместо НИИ-> Н????.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33150477
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sober
Код: plaintext
1.
2.
3.
4.
5.
File inXML= new  File("d:\\Dima\\oa_meteor_Planeta.xml");
InputStream inX= new  FileInputStream(inXML);
inX.read(buf); int  i= 0 ;cmd="";
 while  (buf[i]!= 0 ){cmd+=( char )buf[i];i++};
System.out.println("XML-document:\n"+cmd);cmd= null ;

За что ты его так?:)

Sober
Код: plaintext
1.
2.
3.
String outs=clob.getSubString( 1 ,( int )clob.getChunkSize());
cmd= new  String(outs.getBytes(),"utf-8");
System.out.println("The field clob contains\n"+clob.getChunkSize()+"\n"+cmd);

Ты перепутал методы getChunkSize() и getLength() .

SoberВот один из xml, которые в базе:
сохранил я его на диске как C:/Tmp/oa_meteor_planeta.xml , в кодировке Cp1251 . А теперь кладу в базу:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
 import  oracle.sql.CLOB;

 import  java.io.*;
 import  java.sql.*;

 public   class  ClobTest {

   private   static   final  String USERNAME = "<username>";

   private   static   final  String PASSWORD = "<password>";

   private   static   final  String SERVER = "jdbc:oracle:thin:@<host>:<port>:<SERVICE_NAME>";

   public   static   void  main(String args [])
     throws  Exception {
    Connection con =  null ;
    Statement st =  null ;
    CallableStatement cst =  null ;
     try  {
      DriverManager.registerDriver( new  oracle.jdbc.OracleDriver());
      con = DriverManager.getConnection(SERVER, USERNAME, PASSWORD);
      con.setAutoCommit(false);
      st = con.createStatement();
       try  {
        st.execute("drop table test_lob");
      }  catch  (SQLException e) {}
      st.execute("create table test_lob (test_lob_id number(9), cdata clob)");
      CLOB clob = file2clob(con, "C:/Tmp/oa_meteor_planeta.xml", "Cp1251");
      cst = con.prepareCall("insert into test_lob (test_lob_id, cdata) values (1, ?)");
      cst.setClob( 1 , clob);
      cst.execute();
      con.commit();
    }  finally  {
       if  (cst !=  null ) { cst.close(); }
       if  (st !=  null ) { st.close(); }
       if  (con !=  null ) { con.close(); }
    }
  }

   public   static  CLOB file2clob(Connection con, String fileName, String characterSet)
     throws  SQLException, IOException {
    CLOB clob =  null ;
    Writer writer =  null ;
    InputStreamReader reader =  null ;
     try  {
      clob = CLOB.createTemporary(con, true, CLOB.DURATION_SESSION);
      writer = clob.getCharacterOutputStream();
      reader =  new  InputStreamReader(
         new  BufferedInputStream( new  FileInputStream( new  File(fileName))), characterSet
      );
       char [] chars =  new   char [clob.getChunkSize()];
       int  iChar;
       while  ((iChar = reader.read(chars)) != - 1 ) {
        writer.write(chars,  0 , iChar);
      }
    }  finally  {
       if  (reader !=  null ) {reader.close();}
       if  (writer !=  null ) {writer.close();}
    }
     return  clob;
  }

}
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33152735
Winder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тоже пробовал, работает!
А как изменить размер чанка? Кстати, тоже выводит не полностью!
Код: plaintext
1.
2.
3.
4.
5.
 while  (rs.next())
        {clob=(CLOB)rs.getClob( 2 );
          long  len=clob.getChunkSize();
Reader r=clob.getCharacterStream(); int  i= 1 ;
 while  (i<=len) {System.out.print(( char )r.read());i++;}
И почему, если вывести массив символов(из чтения потока ) сразу весь, то получится что-то вроде [C@1f48262?
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33152879
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WinderТоже пробовал, работает!
А как изменить размер чанка?

Это переменная внутреннего представления LOB'ов в Оракле и определяется для поля в таблице. Можешь ею пользоваться, а можешь и нет. Кстати, по-моему рекомендуется оперировать несколькими чанками в записи.

http://download-west.oracle.com/docs/cd/B10501_01/appdev.920/a96591/adl10pst.htm#92792

Chunksize

A chunk is one or more Oracle blocks. As noted previously, you can specify the chunk size for the LOB when creating the table that contains the LOB. This corresponds to the chunk size used by Oracle when accessing/modifying the LOB value. Part of the chunk is used to store system-related information and the rest stores the LOB value. The getchunksize function returns the amount of space used in the LOB chunk to store the LOB value.

Use a Multiple of Chunksize to Improve Write Performance.

You will improve performance if you execute write requests using a multiple of this chunk size. The reason for this is that the LOB chunk is versioned for every write operation. If all writes are done on a chunk basis, no extra or excess versioning is incurred or duplicated. If it is appropriate for your application, you should batch writes until you have enough for an entire chunk instead of issuing several LOB write calls that operate on the same LOB chunk.


Winder
Кстати, тоже выводит не полностью!

Посмотри в FAQ , там сказано как вывести CLOB в файл. В консоль аналогично:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
   public   void  printClob(CLOB clob, String characterSet)
     throws  SQLException, IOException {
    OutputStreamWriter writer =  null ;
    BufferedReader reader =  null ;
     try  {
      writer =  new  OutputStreamWriter( new  BufferedOutputStream(System.out), characterSet);
      reader =  new  BufferedReader(clob.getCharacterStream());
       int  length;
       char [] buf =  new   char [clob.getChunkSize()];
       while  ((length = reader.read(buf,  0 , clob.getChunkSize())) != - 1 ) {
        writer.write(buf,  0 , length);
      }
    }  finally  {
       if  (writer !=  null ) {writer.close();}
       if  (reader !=  null ) {reader.close();}
    }
  }

Код: plaintext
printClob(clob, "Cp1251");
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33155636
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вот подумал, разбираясь с lob-ми (clob в частности),в принципе не обязательно xml-документы хранить там, можно по идее в xmltype(не помню, правда, нужны ли права на использование пакетов pl/sql ) или, используя, так называемые uritypes(http/ftp/db). Важно записать 5 док-ов(3-10 kb, один из которых я уже приводил: oa_meteor_Planeta.xml) с код-ой windows-1251 и содержащий рус-ий текст, организовать по ним поиск. Например, по части содержимого, вводимого тобой, вывести документ, который его содержит, без прав на создание процедур/функций, директорий.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33155656
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SoberВажно записать 5 док-ов(3-10 kb, один из которых я уже приводил: oa_meteor_Planeta.xml) с код-ой windows-1251 и содержащий рус-ий текст, организовать по ним поиск.
Есть такая штука как Oracle Text - одна из фичей базы, ранее входил в состав Oracle interMedia, теперь выделился оттуда. Он умеет делать контекстный поиск в том чиисле и по полям типа XMLType . Причем у нас Oracle Text используется для поиска по BLOB 'ам, в которых лежат документы любого из поддерживаемых форматов, м.б. XML тоже в их числе.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33159628
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про Oracle Text знаю. Я его вроде один раз использовал=) для пробы. А вот то, что его можно применить к blob-м, не знал. в которых лежат документы любого из поддерживаемых форматов. Это да, да и еще до 4 gb. Все-таки binary large object.
Недавно встретил error типа "End of TNS data channel". Это при попытке записать из временного clob-а в поле таблицы=) не сталкивался(Используя один приведенных шаблонов)? Я так понимаю TNS-что-то вроде прослушки(связь с oracle) (канал связи).
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33159665
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SoberНедавно встретил error типа "End of TNS data channel". Это при попытке записать из временного clob-а в поле таблицы=) не сталкивался(Используя один приведенных шаблонов)? Я так понимаю TNS-что-то вроде прослушки(связь с oracle) (канал связи).
http://download-west.oracle.com/docs/cd/B10501_01/network.920/a96580/glossary.htm#432232

Transparent Network Substrate (TNS)

A foundation technology, built into the Oracle Net foundation layer that works with any standard network transport protocol.

А что произошло - смотреть надо, alert.log на сервере, к примеру.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33164385
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обошел-таки тот error с сообщением "fetch out of sequence". То, о чем я писал выше. Надо было уст-ть в false setautocommit(false) и далее делать выборку с блокировкой строки "select * from <table> for update". Записал в базу(clob) 5 док-ов и вытащил, сохранив их на диске и пролем с кодировкой не было. Используя,конечно, символьные потоки i/o. В основном тот же код, но без использования CLOB.createTemporary.
Какой тип индекса позоляет искать по обрывку фразы(слова/предложения)?
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33164413
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33166410
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже нашел, разобрался=). Они у меня на диске(документация)
Блин, записал 5 xml в clob, сделал поиск по контексту и выборку. А надо, оказывается, не в clob, а в xmltype, без использования pl/sql и уже там с XPATH находить нужный узел, но если записывать через переменную и встречается "я" маленькая, то invalid character 0xFF, с остальными русскими буквами нормально, как например:
num=stmt.executeUpdate("insert into worker(id,xdoc) values(10,sys.XMLType.CreateXML('"+cmd+"'))");
Где cmd-строка. Если не очень маленькая-скажет, что строковый литерал слишком большой. Как быть(?)
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33166478
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sober
Код: plaintext
num=stmt.executeUpdate("insert into worker(id,xdoc) values(10,sys.XMLType.CreateXML('"+cmd+"'))");
Где cmd-строка. Если не очень маленькая-скажет, что строковый литерал слишком большой. Как быть(?)
Иди через CLOB. Сперва создай его (через CLOB.createTemporary(), к примеру), наполни его данными, после чего вызови PreparedStatement:
Код: plaintext
1.
2.
3.
PreparedStatement pst = con.prepareStatement("insert into worker(id, xdoc) values(10, XMLType(?)";);
pst.setClob( 1 , clob);
pst.executeUpdate();
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33172011
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошая идея, пожалуй, не догадался бы до этого.
Только, наверное, не XMLType(?), а sys.XMLType.CreateXML(?) иначе, пожалуй, ругнется. Там, правда, может быть LPX--00007(unexpected end-of-file), если использовать симв. поток i.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33173392
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Те же прежние грабли: даже после выборки из clob и вставки его в xmltype так же ругается на "я"(странное, но ведь xmltype-тот же clob по идее, только что oracle сообщается, что там хранится xml-документ). По сути это почти единственная проблема, которая еще не до конца решена.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33173472
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая версия базы, в какой она создана кодировке? Приведи пример XML (можно приложить файл к сообщению) и укажи его кодировку.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33174239
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
9i Release1. Кодировка там вроде по-умолчанию стоит(...кириллица windows) у xml-документов:windows-1251(стандартное). А один из файлов уже приводил.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33174309
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот XML? Вроде как там шла речь про "И". но у себя я ошибку повторить не могу, поскольку, создав файл "C:/Tmp/test.xml" с содержимым:

Код: plaintext
<я>яяя</я>

и кодировкой Cp1251, уже приведенный код с небольшим изменением:

Код: plaintext
1.
2.
3.
4.
5.
6.
 try  {
  st.execute("drop table test_xml");
}  catch  (SQLException e) {}
st.execute("create table test_xml (test_xml_id number(9), xml XMLType)");
CLOB clob = file2clob(con, "C:/Tmp/test.xml", "Cp1251");
cst = con.prepareCall("insert into test_xml (test_xml_id, xml) values (1, XMLType(?))"); 

отработал нормально. Но у меня база в кодировке UTF8.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33175768
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, он. Насчет того, что вместо И->? было дело, при использовании временного lob и clob таблицы. Ладно, пока ее оставлю. Если повторится- сообщу. В xmltype все же ругается на "я" вполне возмножно из-за win1251(можно,конечно, "я"-> "Я",=), но при выгрузке сделать обратное). А у тебя какая версия?
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33175826
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oracle9i Enterprise Edition Release 9.2.0.6.0
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0

Кодировка везде UTF8.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33176497
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, тут еще одна неясность:
если во временый clob записать док-т, а потом вытащить, то он выдаст не все,а длину lob(clob.length) покажет как размер док-та(что верно), и этот остаток (до конца) он заполняет нулями. В результате после "execute" (XMLType(?) и setClob(1,clob)) он и выдает этот error ввиде "unexpected end-of-file". Сегодня еще попробую обойти, а потом приведу код.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33176815
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странные у тебя ошибки какие-то, я все не могу из воспроизвести:) Что понимается под "остаток (до конца)"?
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33178589
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот, например(фрагмент):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CLOB clob;
Writer writer= null ;
Reader oreader;
InputStreamReader reader= new  InputStreamReader( new  FileInputStream("d:/oa_goms_planeta.xml"));
            clob=CLOB.createTemporary(con,true,CLOB.DURATION_SESSION);
             char [] cbuf= new   char [( int )clob.getChunkSize()];
            writer=clob.getCharacterOutputStream();
             while  ((len=reader.read(cbuf))!=- 1 )
            writer.write(cbuf, 0 ,len);
             if  (reader!= null ) reader.close(); if  (writer!= null ) writer.close();
            System.out.println("The CLOB is:"+clob.length());
            len= 0 ;cbuf= null ;
            cbuf= new   char [clob.getChunkSize()];
            reader= null ;
            oreader=clob.getCharacterStream();
             while  ((len=oreader.read(cbuf))!=- 1 )
            {System.out.println(cbuf);}
         if  (oreader!= null ) oreader.close();
На консоль выводит примерно следующее:
The CLOB is:3216
<?xml version="1.0" encoding="windows-1251"?>
<metaData xmlns="http://www.wmo.ch/www/metadata"><metadataFileIdentifier>http://cliware.meteo.ru/egfd_catalog/metadata/oa_goms_Planeta.xml</metadataFileIdentifier><metadataLanguage>ru</metadataLanguage><metadataContact><organisationName>ГУ Всероссийский НИИ гидрометеорологической информации - МЦД</organisationName><role>user</role><individualName>Хохлова Анна Владимировна</individualName><positionName>Зав. Отделом аэрологии</positionName><contactInfo><phone><voice>+7(08439)74-680</voice></phone><address><city>Королева,6 г.Обнинск</city><administrativeArea>Калужская</administrativeArea><postalCode>249035</postalCode><country>РОССИЯ</country><electronicMailAddress>anna@meteo.ru<;/electronicMailAddress></address></contactInfo></metadataContact><metadataDateStamp>2005-06-07</metadataDateStamp><metadataStandardName>WMO19115</metadataStandardName><metadataStandardVersion>0.2</metadataStandardVersion><identificationInfo><citation><resourceTitle>Государственный фонд Росгидромета. Спутниковые данные.</resourceTitle><resourceIdentifier>Монтажи спутниковых изображений (GOMS)</resourceIdentifier></citation><abstract>До 1998г. фотомонтажи спутниковых изображений из НИЦ "Планета" поступали на фотопленках. Начиная с 1998г. монтажи поступают на новых технических носителях (CD ROM). На них представлены монтажи спутниковых изображений, полученных с полярно-орбитальных или геостационарных спутников. Монтажи сопровождаются отдельными файлами, содержащими информацию о времени наблюдений.</abstract><pointOfContact><organisationName>ГУ Всероссийский НИИ гидрометеорологической информации - МЦД</organisationName><role>custodian</role><individualName>Шакирзянов Идрис Закирзянович</individualName><positionName>Начальник центра метаданных</positionName><contactInfo><phone><voice>+7(08439)74-158</voice><facsimile>+7(095)255-22-25</facsimile></phone><address><city>Королева, 6 г.Обнинск</city><administrativeArea>Калужская</administrativeArea><postalCode>249035</postalCode><country>РОССИЯ</country><electronicMailAddress>idr@meteo.ru<;/electronicMailAddress></address><onlineAddress>www.meteo.ru</onlineAddress></contactInfo></pointOfContact><resourceMaintenance><maintenanceAndUpdateFrequency>annually</maintenanceAndUpdateFrequency></resourceMaintenance><spatialRepresentationType>bitmap</spatialRepresentationType><dataCharacterSet>8859part5</dataCharacterSet><topicCategory>satelliteObservation</topicCategory><topicCategory>imageryBaseMapsEarthCover</topicCategory><descriptiveKeywords>Наблюдение</descriptiveK
А дальше некоторое кол-во нулей ввиде квадратов(здесь они не отображаются)
В общем так.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33178677
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SoberВот, например(фрагмент):
Код: plaintext
1.
2.
3.
 while  ((len=oreader.read(cbuf))!=- 1 ) {
  System.out.println(cbuf);
}


Конечно, он тебе будет выводить в консоль весь cbuf, хотя в него прочиталось len символов.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33178739
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно, допустим так. Можно, конечно, и не выводить. Но, если его длина такая же, как и размер файла, то в нем весь xml(или не обязательно?). Во всяком случае, при подстановке clob-файл оказывается не до конца записан. Можно, конечно, уже готовый clob таблицы, где у меня эти док-ты уже есть и вытаскиваются без проблем, подставить в xmltype, но хотелось бы с этим разобраться.=)
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33178775
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про то, как выводить, уже говорили . Насчет "не до конца записан" - покажи код. Может ты поток не закрываешь или хотя-бы не сбрасываешь перед вызовом записи CLOB'а в базу?
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33180464
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код приведу.
Поток закрываю иначе не запишется. А что ты подразумеваешь под сбросом?
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33180469
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
flush()
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33182385
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Примерно так:

CLOB clob=null;
Writer writer=null;
InputStreamReader reader=new InputStreamReader(new BufferedInputStream(new FileInputStream("e:/xml/oa_goms_planeta.xml")),charset);
Reader oreader=null;
try
{clob=CLOB.createTemporary(con,true,CLOB.DURATION_SESSION);
char[] cbuf=new char[(int)clob.getChunkSize()];
writer=clob.getCharacterOutputStream();

while ((i=reader.read(cbuf,0,(int)clob.getChunkSize()))!=-1)
{
writer.write(cbuf,0,i);
}
}
finally
{
if (writer!=null) writer.close();
if (reader!=null) reader.close();
}
oreader=clob.getCharacterStream();i=0;
char[] cbuf=new char[(int)clob.getChunkSize()];
cbuf=null;cbuf=new char[(int)clob.length()];
System.out.println("Hey! cbuf from clob is:"+clob.length()+" "+clob.getChunkSize()+" "+clob.getLength());
while ((i=oreader.read(cbuf,0,(int)clob.length()))!=-1)
{

System.out.println("Number of read symbols is:"+i);
System.out.println(cbuf);
}
К примеру, из 3 м.длины выдает только 2.7м.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33182696
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня вышеприведенный код выдал ровно столько символов, сколько и было в файле.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33182948
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть некоторые догадки:
У файла есть метод flush()?
И как указать размер файла при инициализации?
А если консоль, то можно ли изменить его размер? Но с другой стороны, для любого файла(3-7 Kb) он выдает тоже(т.е.,пропорционально).
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33182972
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
flush() - это у потоков. Размер файла - length().
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33189777
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ты ее в какой среде разработки прогонял и версии б.д.?
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33199379
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какие еще есть варианты создания CLOB не через createTemporary()? Да и сильно ли отличается работа с LOBми в 9i(R1,R2) и 10g?
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33199452
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SoberКакие еще есть варианты создания CLOB не через createTemporary()?
/topic/195669&pg=1#1667972 Второй способ
SoberДа и сильно ли отличается работа с LOBми в 9i(R1,R2) и 10g?
С точки зрения базы ИМХО мало, а вот в JDBC от Oracle10 в CLOB\'e, например, реализовали наконец метод setCharacterStream(). В драйверах от 9i ее вызов приводил к исключению, мол, не поддерживается. В JDBC от 10-ки работает, но это от базы не зависит. Может еще чего есть.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33199645
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно.
Кстати, на oracle.com: нашел свой же error(когда после вставки пустого lob делал выборку для записи данных):
Error Message: "ORA-01002: fetch out of sequence"

A JDBC Connection by default has the AutoCommit turned ON. However, to use a SQL that has 'for update' you need to have autoCommit to be turned OFF.

Hence, the solution is to set autocommit to false.
Ее уже ранее описывал.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33202262
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, возвращаясь к той проблеме с временным lobм. Не полностью выданные символы - использование не того jdbc-драйвера. У меня был ojdbc14.jar, но после замены последнего на classes12.jar - проблема оказалась решена. На всякий случай вернулся к тому, чтобы убедиться-да, так оно и есть.=)
А Oracle у меня 9.0.1.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33207442
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что касается кодировки windows-1251, натолкнулся на один факт. Если в Delphi в Caption написать вначале "я" - она не отобразится. Даже если после нее добавить что-нибудь еще.
Пока вроде баг не было. Пока можно считать, что тема закрыта.
...
Рейтинг: 0 / 0
52 сообщений из 52, показаны все 3 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Смена кодировки файла из-под java
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]