2018年8月29日 星期三

Java zip 解壓編碼問題


前幾天有人使用Java zip解壓縮時遇到一個錯誤

java.lang.IllegalArgumentException: MALFORMED

我在幫忙google查詢問題的時候發現到他其實是因為壓縮檔裡面有中文

解壓縮的時候預設用UTF-8出錯
但是提出解法的大多是簡體中文的使用者
所以會看到以下的程式碼

Charset gbk = Charset.forName("GBK");
ZipFile zipFile = new  ZipFile(zipFileName, gbk);


事實上GBK是簡中的編碼所以用GBK去解壓還是會造成亂碼的問題
台灣BIG5的編碼你需要使用的Charset是ms950

Charset gbk = Charset.forName("ms950");
ZipFile zipFile = new  ZipFile(zipFileName, gbk);

將這個紀錄在google blog跟痞客邦上,希望有繁中的使用者遇到這個問題的時候不會找不到正確的編碼而卡住

2016年5月6日 星期五

Oracle DB長度限制

最近專案很忙,於是很久沒有更新了
來更新一點最近遇到的問題













前幾天在新增oracle 的stored procedure跳出這個錯誤
去google發現對於stored procedure的名稱以及主鍵長度會有30個字數的限制
超過就不能建立資料表或是預存程序

2016年1月24日 星期日

[工具]bootstrap-select介紹

今天介紹bootstrap裡一個好用的東西:selectpicker

首先他需要的元件有jquery、bootstrap與bootstrap-select,以下範例使用cdn:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" integrity="sha384-fLW2N01lMqjakBkx3l/M9EahuwpSfeNvV63J5ezn3uZzapT0u7EYsXMjQV+0En5r" crossorigin="anonymous">


<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.9.4/css/bootstrap-select.min.css">


<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.9.4/js/bootstrap-select.min.js"></script>


<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.9.4/js/i18n/defaults-zh_CN.min.js"></script>


然後html body裡面寫入以下的內容

 <body>

  <h2>selectpicker</h2>

  <form>

  <select class="selectpicker" data-live-search="true">

    <option>Mustard</option>

     <option>Ketchup</option>

     <option>Relish</option>

  </select>

  </form>

  <script type="text/javascript">

   $('.selectpicker').selectpicker({

     style: 'btn-info',

     size: 4

  });

  </script>

 </body>

javascript的部分只要使用$('.selectpicker').selectpicker()就可以了
裡面的物件是定義他的大小跟樣式
也可以不定義
畫面如下


如果要更詳細的內容可以參考此網站的範例
bootstrap-select

2016年1月19日 星期二

[C#]陣列:[]、List、Array、ArrayList 區別

最近被公司要求要改.net mvc的網站
裡面需要處理資料庫的資料
讀取出來的資料可以ToList或是ToArray
不過C#的List與Array似乎與Java的有些差別
於是將他查下來後記在這邊避免忘記

[] 是針對特定類型、固定長度的。
List 是針對特定類型、任意長度的。
Array 是針對任意類型、固定長度的。
ArrayList 是針對任意類型、任意長度的。

2015年12月29日 星期二

[Tomcat]處理編碼問題

一般來說serlet的post請求可以使用filter或是用request.setCharacterEncoding("UTF-8");
來處理編碼
但是當使用Get方法時,Tomcat沒有用正確的編碼來處理querystring,資料就會變成亂碼。

解決方法是修改tomcat資料夾下的
server.xml檔案,找到Connector標籤,加入URIEncoding="UTF-8"即可。


Ex:
<Connector port="8080" protocol="HTTP/1.1"
 URIEncoding="UTF-8"
 connectionTimeout="30000"
 redirectPort="8443" />

2015年12月27日 星期日

Visual Studio 快速鍵

首先一些常用的快速鍵可以在編輯→進階裡找到
有些快速鍵是用","隔開,
舉例來說註解是Crtl+K,Ctrl+C
那麼你就要先按下Ctrl+K,此時畫面的左下角會顯示這個訊息
然後再按下Ctrl+C就可以把選取範圍註解

還有一些常用的快速鍵如下

快速鍵 效果
CTRL + G 移動到指定行號位置
CTRL + F4 關閉程式頁籤
CTRL + F 尋找
CTRL + SHIFT + F 在檔案中尋找
CTRL + H 取代
CTRL + SHIFT + H 在檔案中取代
CTRL + ALT + L 檢視方案總管
CTRL + ALT + X 檢視工具列
F5 開始偵錯
CTRL + F5 啟動但不偵錯
CTRL + SHIFT + W 在瀏覽器中顯示


2015年12月14日 星期一

[Spring]web.xml簡易設置

再SpringMVC中,控制前端的class為
org.springframework.web.servlet.DispatcherServlet
DispatcherServlet負責將客戶的請求分派給對應於請求的控制物件
DispatcherServlet需要設定在web.xml中

以下是web.xml設定

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

  <display-name>Website</display-name>

     <servlet>

      <servlet-name>Website</servlet-name>

      <servlet-class>

         org.springframework.web.servlet.DispatcherServlet

      </servlet-class>

      <init-param>

            <param-name>contextConfigLocation</param-name>

            <param-value>/WEB-INF/mvc-config.xml</param-value>

        </init-param>

      <load-on-startup>1</load-on-startup>

   </servlet>

    <servlet-mapping>

        <servlet-name>Website</servlet-name>

        <url-pattern>*.do</url-pattern>

    </servlet-mapping>

  <welcome-file-list>

    <welcome-file>/WEB-INF/jsp/login.jsp</welcome-file>

  </welcome-file-list>



  <listener>

    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>

  </listener>

</web-app>






其中init-param有個屬性contextConfigLocation是用來設定讀取的xml放哪個位置
預設是/WEB-INF/(servlet-name)-servlet.xml
這邊設定是/WEB-INF/mvc-config.xml
servlet-mapping mapping中設定了spring管理的網頁路徑
此範例設定將所有路徑為.do的交給spring mvc管理

以下為mvc-config.xml的範例

<?xml version="1.0" encoding="UTF-8"?>



<beans xmlns="http://www.springframework.org/schema/beans"

 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

 xmlns:context="http://www.springframework.org/schema/context"

 xmlns:aop="http://www.springframework.org/schema/aop"

 xmlns:tx="http://www.springframework.org/schema/tx"

 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd

      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd

      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">



 <aop:aspectj-autoproxy />

 <context:component-scan base-package="website" />

 

 <!-- viewResolver setup -->

 <context:component-scan base-package="website.controller" />

    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />



    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

          <property name="prefix" value="/WEB-INF/jsp/" />

          <property name="suffix" value=".jsp" />

    </bean>



</beans>


ViewResolver是管理view的工具
prefix(此範例值為/WEB-INF/jsp/)表示的是view存放的路徑
suffix(此範例值為.jsp)表示的是檔案的副檔名
若是你的java程式有這段程式碼

   @RequestMapping("/test.do")

    public ModelAndView test(HttpServletRequest req,

            HttpServletResponse resp) throws Exception {

        return new ModelAndView("demo");

    }


那麼/test.do這隻程式就會將網頁導向/WEB-INF/jsp/demo.jap
(檔名式依照ModelAndView內的參數決定)