2016-08-09 3 views
0

다운로드 Struts2 동안 삽입 :자동 공간 내가 할 노력하고있어

서버 TXT 파일에 생성하고 클라이언트 측에서 다운로드합니다. 내가 스트럿 2를 사용하고 , 여기에 코드 부분입니다 :

AwesomeAction.java

InputStream fileInputStream; 

public InputStream getFileInputStream(){ 
    return fileInputStream; 
} 

public String execute() { 
    res = "toto"; 
    fileInputStream = new StringInputStream(res); 
    return SUCCESS; 
} 

struts.xml 작동하지 않습니다 무엇

<action name="awesomeAction" class="pathtomyawesomeaction"> 
    <result name="success" type="stream"> 
       <param name="contentType">text/plain</param> 
       <param name="inputName">fileInputStream</param> 
       <param name="contentDisposition">attachment;filename="id_opp.txt"</param> 
       <param name="bufferSize">1024</param> 
    </result> 
    <result name="error" type="redirect">/erreur.do</result> 
</action> 

:

클릭하면 액션을 트리거하는 링크에서 "id_opp.txt"라는 파일이 실제로 다운로드되고 모든 텍스트 ("toto")가 포함되지만 각 문자 앞에 공백이 추가됩니다.

"t O t O"서버와

, 내 변수가 "토토"서버 측 포함되어 있는지 확인 해요 제충, 그래서 내가 그리워 설정 ...

어떤 생각을해야합니까?


import org.hsqldb.lib.StringInputStream; InputStream의 경우 String이 클래스에 내장되어 있으므로 FileInputStream 또는 다른 것을 사용할 수 없으며 다른 방법을 알지 못합니다.

StringInputStream이 문제의 근본이었다 사용하는 대신에 전환 : : 나는 어떤 결과


토마스

해결 된 덕분에 가지고로 인코딩에서 확인

, 즉시 업데이트됩니다 을 fileInputStream = 새로운 ByteArrayInputStream (res.getBytes (StandardCharsets.UTF_8)); 실제 인코딩 등과 함께 "고해상도"변수에 대한 InputStream를 구축

... 이런

+1

제공하지 않았기 때문에 인코딩 문제 일 수 있습니다. 게다가, 당신은'StringInputStream' 클래스를 사용하고 있습니까? AFAIK는 스트럿츠 2 코어 라이브러리가 아니며 JDK 클래스도 없다. 그리고 당신의 모범이 맞습니까? 't'를 소문자로 썼지 만 대문자로 받아들일까요? – Thomas

+0

그 세부 사항으로 질문을 편집하여 누구나 볼 수 있도록 할 것입니다! –

+0

@Thomas 대문자 T는 오타였습니다. 이 문제를 해결하기 위해 InputStream을 빌드하는 더 좋은 방법 인 ByteArrayInputStream을 사용하여 최소 30 분 내에 업데이트 할 것입니다. –

답변

1

문제로 인해 다른 인코딩으로 발생할 수 있습니다. 내부적으로 Java는 16 비트 문자를 사용하여 문자열을 저장하며이를 바이트 표현 (예 : 스트림에 쓰기)으로 변환 할 때 호출자가 제공하는 인코딩 또는 시스템 인코딩 인 기본 인코딩 중 하나를 사용합니다.

따라서 StringInputStream이 문자열로 무엇을하는지, 즉 문자열을 바이트로 변환하는 방법과 어떤 인코딩이 사용되는지 (있는 경우)에 따라 달라집니다.

또한 UTF-8의 BOM (바이트 순서 표시)과 같은 인코딩을 나타내는 정보를 추가하지 않으면 txt 파일의 해석 방법에 독자에 따라 다를 수 있습니다.

당신이했던 것처럼, 즉 ByteArrayInputStream(res.getBytes(StandardCharsets.UTF_8))을 사용하는 것은 적어도 글을 쓸 때 문제를 해결할 것입니다. 편집자는 BOM이없는 경우에도 데이터를 올바르게 해석 할 수 있습니다 (UTF-8은 ISO-Latin 1 (ASCII)와 같은 공통 문자를 나타내므로 판독기의 "잘못된"인코딩조차도 문제가되지 않을 수도 있음).

+0

도움과 신속성에 다시 한번 감사드립니다! –

+1

@AlexandreBeaudet 너 환영합니다 :) – Thomas

관련 문제