実現したいこと
仕事で利用する必要のある下記スクリプトをWindows 10 端末のNode.jsで実行し、ウェブアクセシビリティチェックを実施すること
※先日投稿させていただいた、下記の質問と同スクリプトに関する内容となります。
五月雨式の質問となってしまい、申し訳ありません。
※参考サイト: GitHub 「axe-test.js」
前提
※基礎知識の全くない状態にも関わらず業務でNode.jsを利用し特定のスクリプトを実行することを求められている状況なので、見当違いな内容を記載している可能性がありますが、ご容赦ください。
先日投稿した質問内容につきましては、ご丁寧に解説していただけたおかげで無事解決しました。 ご助言いただき、ありがとうございました。
この度は改めて下記スクリプトをNode.jsで実行したところ、出力されたCSVファイルの日本語の箇所が文字化けしてしまい、またメモ帳等から文字コードを変更しても改善されない状況となってしまっています。
スクリプト本体の修正・出力後にできる対策等方法は問いませんので、文字化けせずに内容を確認できるようになる手段をお教えいただけないでしょうか。
なお、あまり時間がないため、もし解決方法をご存じの方がいらっしゃいましたら、できるだけ早くご教示いただければ幸いです。
発生している問題・エラーメッセージ
出力されたCSVファイル(出力時点での文字コードはUTF-16 LE)で、下記の通り日本語の箇所のみが文字化けしてしまっています。
○result.csv
URL,Volation Type,Impact,Help,HTML Element,Messages,DOM Element https://www.xxx.com/,color-contrast,serious,https://dequeuniversity.com/rules/axe/4.9/color-contrast?application=axe-puppeteer&lang=ja,<a href="" data-slide-index="1" class="bx-pager-link">2譫夂岼縺ョ繧ケ繝ゥ繧、繝峨r陦ィ遉コ</a>,隕∫エ縺ョ繧ウ繝ウ繝医Λ繧ケ繝域ッ斐′荳榊香蛻・〒縺・4.1・亥燕譎ッ濶イ: #003333縲∬レ譎ッ濶イ: #8c8c8c縲√ヵ繧ゥ繝ウ繝医し繧、繧コ: 0.0pt (0px)縲√ヵ繧ゥ繝ウ繝医・螟ェ縺・ bold・峨ゅさ繝ウ繝医Λ繧ケ繝域ッ・.5:1繧貞ソ・ヲ√→縺励∪縺・a[data-slide-index="1"] ...
○ターミナル上に出力させた場合
URL,Volation Type,Impact,Help,HTML Element,Messages,DOM Element https://www.xxx.com/,color-contrast,serious,https://dequeuniversity.com/rules/axe/4.9/color-contrast?application=axe-puppeteer&lang=ja,<a href="" data-slide-index="0" class="bx-pager-link">1枚目のスライドを表示</a>,要素のコントラスト比が不十分です 4.1(前景色: #003333、背景色: #8c8c8c、フォントサイズ: 0.0pt (0px)、フォントの太さ: bold)。コントラスト比4.5:1を必要とします,a[data-slide-index="0"] ...
該当のソースコード
○ダウンロードした「axe-test.js」
※必要となるPuppeteer、axe-core、axe-reportsは参考サイトの手順通りにインストール済みです。
JavaScript
1const { AxePuppeteer } = require('@axe-core/puppeteer'); 2const puppeteer = require('puppeteer'); 3 4// テスト結果を日本語で出力するように設定する。 5const AXE_LOCALE_JA = require('axe-core/locales/ja.json'); 6const config = { 7 locale: AXE_LOCALE_JA 8} 9 10// テスト結果の出力に、axe-reports を使用するように設定する。 11const AxeReports = require('axe-reports'); 12 13// テスト対象の URL を、外部テキストファイルから読み込んで、配列に整形する。 14const fs = require('fs'); 15let urls_list = fs.readFileSync("./urls.txt", "utf-8"); 16urls_list = urls_list.replace(/\r?\n/g, ','); 17urls_list = urls_list.split(','); 18 19(async () => { 20 21 const urls = urls_list 22 23 // axe-reports で、見出し行をまずは作成する。 24 AxeReports.createCsvReportHeaderRow(); 25 26 const browser = await puppeteer.launch(); 27 28 for (let i = 0; i < urls.length; i++) { 29 30 const url = urls[i]; 31 const page = await browser.newPage(); 32 await page.setBypassCSP(true); 33 34 // デバイスのエミュレートをする場合は、下記を適用する。 35 // await page.emulate(puppeteer.devices['iPhone 8']); 36 37 // ページを読み込む。 38 await Promise.all([ 39 page.setDefaultNavigationTimeout(0), 40 page.waitForNavigation({waitUntil: ['load', 'networkidle2']}), 41 page.goto(`${url}`) 42 ]); 43 44 // テストを実行する。withTags で、テスト基準をいろいろ設定できる。 45 const results = await new AxePuppeteer(page).configure(config).withTags(['wcag2a', 'wcag2aa', 'wcag21a', 'wcag21aa', 'best-practice']).analyze(); 46 47 // axe-reports で、検証結果の行を追加する。 48 AxeReports.createCsvReportRow(results); 49 50 await page.close(); 51 } 52 53 await browser.close(); 54 55})();
○スクリプトの実行コマンド
node axe-test.js > result.csv
試したこと
下記の順番で試みましたが、何れも失敗しています。
(1) メモ帳で開き、「名前を付けて保存」から文字コードを「ANSI」に変更して保存
→メモ帳で開きなおすとステータスバーの表示が「ANSI」に代わっているものの、文字化けしている箇所には変化なし
※その後、UTF-8・UTF-16等指定できる文字コード全てで試しました。
(2) axe-test.js本体の編集
→ウェブで調べて「iconv-lite」や「encoding-japanese」等を導入、書き出す直前の「results」をShift_JISに変換する指示を追記してみましたが、結果には変わりありませんでした。
(3) Pythonで作成した文字コード変換プログラムの適用
→chardetライブラリのdetectメソッドで出力されたCSVファイルの文字コードを検出・検出された文字コードにて元ファイルの内容を読み取り・新たに作成したShift_JIS使用のファイルに内容を転記するというプログラムを作成し適用しましたが、結果は1番と同じく、「文字コードは変わるのに文字化けした箇所は変化なし」という結果になりました。
補足情報(FW/ツールのバージョンなど)
Node.jsのバージョンは20.16.0を利用しています。
頂いたコメントに関する補足等
- 「出力時、CSVファイルがUTF-16 LEだった」ことの根拠につきましては、Pythonのchardet.detectで検出させprintで表示させた内容が「UTF-16」であったことと、メモ帳で開いたさいにステータスバーに「UTF-16 LE」と表示されていたことの2点です。
- サクラエディタでファイルを開く際に「SJIS」を指定しましたが、表示内容には変化がなく、文字化けしていた箇所も同じでした。
- 実行環境はWindows 10のWindows Power Shellです。
- 「chcp」コマンドの結果、「現在のコード ページ: 932」と表示されました。
以上です。
何卒よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー