nodejsやvueなどまだよくわかっていないのですが、質問いたします。
前提として、Debian10上で、Dockerを使って、nodejs+tomcat+SQLServer(Express) で動作しているシステムがあります。
インフラ面(メモリやライセンスなど)の問題で、WindowsServer上に移しています。
Windows上は、Tomcatのサービス、nodejsをサービス登録、SQLServerStandardを導入して、Dockerを外した状態です。
画面表示などは問題ないのですが、この中で、axios経由でCSVダウンロードする機能があり、文字化けします。具体的には、漢字が全て EF BF BD になっています。REPLACEMENT_CHARACTER (U+FFFD) をUTF-8に変換した後の状態です。Debian10側ではUTF-8で正しくダウンロードできています。
TomcatはUTF-8設定で、Tomcat上のbackend側でCSVデータを作成後もUTF-8として、Content-Type を text/csv で戻しているようです。
axiosはUTF-8前提で受渡しするようですが、UTF-8で受取り→JavaScriptでUTF-16になる→encodeURIComponent()でUTF-8に変換→charaset=utf-8としてダウンロード、
とこれ自体に問題はないようですが、Windows上で何かの原因か設定や環境で違う文字コードか何かになっていると思われるのですが、何かヒントでも御教授下さい。
axiosのgetに、responseType にarraybuffer,blobなど、Content-Type や encoding を渡してみても、いまいち兆しが見えません。パッケージ単位でバージョン違いとOSによる問題などであればまだいいのですが。
わかる範囲のバージョンを明記します。
Apache Maven 3.6.0
Apache Tomcat 9.0.48
JDK11
Nuxt 2.9.1
frontend側ソース frontend\pages\shuukei\sales\details.vue から抜粋 exporttoCSV(){ var api = '/api/po/detail/export-csv?'+this.params; this['$axios'].get(api).then(csv =>{ var universalBOM = "\uFEFF"; const data = csv.data; const link = document.createElement("a"); link.href = 'data:text/csv;charset=utf-8,' + encodeURIComponent(universalBOM+data); link.setAttribute("download", "明細一覧.csv"); link.click();
backend側 \backend\src\main\java\w\xxx\util\common\generator\CSVGenerator.java public <E>String generate(Table<E> table) StringWriter sWriter = new StringWriter(); : byte[] bytes = sWriter.toString().getBytes(); return new String(bytes, StandardCharsets.UTF_8);
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。