Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: потеря русского имени файла при закачке из oracle  (Прочитано 5949 раз)
0 Пользователей и 4 Гостей смотрят эту тему.
typhoon-zsmk
Гость
« : 26-07-2006 08:54 » 

сервлетом пытаюсь загрузить файл клиенту из оракла, анг имена файлов отображаются в диалоге и грузятся нормально, русские в диалоге отображаются заглавной латиницей и цыфрами, совершенно левыми и каждый раз разными (даже в одной сессии), при этом если сохранить то файл нормально сохраняется, за исключением неправильности имени.
Кодировки в переменной filename и contentDisposition пробовал привить по разному, разные кодировки  коннекта - не помогло.
Код:

public class filesdn extends HttpServlet {
 
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
 throws ServletException, IOException {
 
    String DBurl = "jdbc:oracle:thin:***:***";
    String dbu = "***";
    String dbp = "***";
    String dbdfn = "oracle.jdbc.OracleDriver";

    req.setCharacterEncoding("windows-1251");
    ServletOutputStream os = null;

    Properties connInfo = new Properties();
    connInfo.put("user", dbu);
    connInfo.put("password", dbp);
    connInfo.put("charSet", "Cp1251");
    Connection conn = null;
    PreparedStatement pstmt = null;
    try {
     String id = req.getParameter("id");
     conn = DriverManager.getConnection(DBurl, connInfo);;
     
     // Set the content header information
     String contentDisposition = "attachment; filename=\"";
     // Query to get the data content
     String sql = "select filename, filedata from z_ufiles where id = ?";
     pstmt = conn.prepareStatement(sql);
     pstmt.setString(1, id);
     ResultSet rs = pstmt.executeQuery();
 
     if (rs.next()) {
        Blob fileblob = rs.getBlob("filedata");
        String filename = rs.getString("filename");
        String filetype = filename.substring(filename.lastIndexOf(".") + 1, filename.length());
        String mimetype = "application/octet-stream";
        if (filetype.trim().equalsIgnoreCase("txt")) mimetype = "text/plain";
        else if (filetype.trim().equalsIgnoreCase("doc")) mimetype = "application/msword";
        else if (filetype.trim().equalsIgnoreCase("xls")) mimetype = "application/vnd.ms-excel";
        else if (filetype.trim().equalsIgnoreCase("pdf")) mimetype = "application/pdf";
        else if (filetype.trim().equalsIgnoreCase("ppt")) mimetype = "application/ppt";
       System.out.println("Найден файл: "+filename+"  type: "+mimetype);
        contentDisposition = contentDisposition + filename + "\"";
        int length = contentDisposition.length();
        StringBuffer sb = new StringBuffer(length);
        sb.append(sb);
        resp.setContentType(mimetype);
        resp.setHeader("Content-Disposition", sb.toString());
 
        InputStream in = fileblob.getBinaryStream();
        os = resp.getOutputStream();
        byte by[] = new byte[32768];
        int index = in.read(by, 0, 32768);
        while (index != -1) {
         os.write(by, 0, index);
         index = in.read(by, 0, 32768);
        }
        os.flush();
      } else {
        System.out.println("запись " + id + " не найдена");
      }
     } catch (Exception e) {
       System.out.println(e.toString());
     } finally {
       if (os != null)
       os.close();
       if (pstmt != null)
        try {
         pstmt.close();
        } catch (Exception e) {
        }
        if (conn != null)
        try {
         conn.close();
        }
        catch (Exception e) {
        }
      }
    }

}
Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #1 : 26-07-2006 09:18 » 

почитай про alter session set nls_language =...
может поможет
Записан

Удачного всем кодинга! -=x[PooH]x=-
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines