一键导入
windows-zip-extract
Windows で作成された ZIP ファイルを macOS / Linux で展開するときの Deflate64 圧縮・Shift_JIS ファイル名・CP932 テキストエンコーディングの 3 重問題を解決する。ZIP 展開で文字化けやエラーが出たときに参照する。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Windows で作成された ZIP ファイルを macOS / Linux で展開するときの Deflate64 圧縮・Shift_JIS ファイル名・CP932 テキストエンコーディングの 3 重問題を解決する。ZIP 展開で文字化けやエラーが出たときに参照する。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Agent guide for running GPU experiments and serverless model deployments with the jl CLI on JarvisLabs.ai.
設計・アーキテクチャの壁打ちを Codex MCP (GPT) と行う。 実装前の方針検討、トレードオフ分析、API 設計の相談に使う。 "codex discuss", "GPTと相談", "壁打ち", "設計を議論" などで呼び出す。
git diff ベースのコードレビューを Codex (GPT) に依頼する。 コード変更後にセカンドオピニオンが欲しいとき、"codex review", "GPTにレビューして", "セカンドオピニオン" などで呼び出す。実体は公式プラグイン codex@openai-codex に 移行済みで、本 skill は自然文トリガーの受け皿 (誘導シム)。
実装・レビュー (Codex MCP / GPT)・修正の反復ループ。 ユーザーの意図する機能が動くこと (= 機能ゲート pass) と Codex の LGTM を AND で満たすまで回す。 タスク説明 / plan ファイル / 既存 diff のいずれを起点にしてもよい。 実装フェーズは Karpathy 4 原則 (think before / simplicity / surgical / goal-driven) に従う。 "lgtm loop", "LGTMまで回す", "実装してレビューして直して", "実装と修正をループで" などで呼び出す。
生成・編集した視覚成果物(Web ページ URL、ローカルの HTML/UI ファイル、 画像・図・PDF/SVG)をスクリーンショットで取得し、Read で実際に見て チェックリスト採点する。崩れ・はみ出し・重なり・コントラスト不足を検出し、 NG なら具体的な修正案を返す。Max プランの画像認識を惜しまず使うための専用コマンド。
人間が読む長めの文章・レポート・ドキュメント・資料を生成するときに使用する。単一の HTML ファイル (+ 必要なら assets/) として出力し、Markdown が 100 行を超えると読まれなくなる問題を sticky TOC・構造化 callout・優先度 pill・数式 (KaTeX)・コードハイライト (Prism)・D2 ダイアグラム・チャート (matplotlib SVG) で解決する。技術分析・応用検討・設計レポート・選択肢比較・サーベイ・議論ログ (Codex 等の第二視点を取り込む review-log 型) など、500 字を超える / 図表を伴う / 改訂を重ねる文書には必ず使用する。"レポート", "ドキュメント", "資料", "サーベイ", "技術レポート", "HTMLレポート", "応用検討", "選択肢比較", "議論ログ", "review log", "Codex レビュー反復" などのトリガーで発動する。
| name | windows-zip-extract |
| description | Windows で作成された ZIP ファイルを macOS / Linux で展開するときの Deflate64 圧縮・Shift_JIS ファイル名・CP932 テキストエンコーディングの 3 重問題を解決する。ZIP 展開で文字化けやエラーが出たときに参照する。 |
| user-invocable | false |
実践知見: uSonar 被保険者データ展開 (2026-04) での対応をもとにまとめた。
Windows 標準の ZIP 作成は以下の 3 つの非互換を同時に起こすことがある:
| # | 問題 | 原因 | 影響 |
|---|---|---|---|
| 1 | 展開自体が失敗 | Deflate64 (タイプ 9) 圧縮 | macOS unzip, Python zipfile が未対応 |
| 2 | ファイル名が文字化け | ファイル名が Shift_JIS (CP932) で記録 | UTF-8 環境でバイト列がそのまま書き出される |
| 3 | ファイル内容が文字化け | テキスト/CSV が Shift_JIS | cat / head で文字化け |
macOS unzip / ditto / Python zipfile は Deflate64 をサポートしない。
p7zip (7z コマンド) を使う。
pixi global install p7zip
7z x archive.zip -o. -aoa
-o.: カレントディレクトリに展開-aoa: 既存ファイルを上書き展開に失敗した場合、まず圧縮方式を確認する:
import zipfile
zf = zipfile.ZipFile('archive.zip', 'r')
for info in zf.infolist():
print(f'{info.filename}: compress_type={info.compress_type}, size={info.file_size}')
| タイプ | 名前 | unzip | Python zipfile | 7z |
|---|---|---|---|---|
| 0 | Stored | OK | OK | OK |
| 8 | Deflate | OK | OK | OK |
| 9 | Deflate64 | NG | NG | OK |
| 12 | BZIP2 | NG | OK | OK |
| 14 | LZMA | NG | OK | OK |
7z は ZIP 内のファイル名バイト列をそのまま書き出す。
Shift_JIS のファイル名は latin-1 → cp932 でデコードしてリネームする。
import os
for f in os.listdir('.'):
try:
decoded = f.encode('latin-1').decode('cp932')
if decoded != f:
os.rename(f, decoded)
print(f'Renamed: {f!r} -> {decoded}')
except (UnicodeDecodeError, UnicodeEncodeError):
pass # ASCII のみのファイル名はスキップ
OS がファイル名を UTF-8 として解釈しようとするが、
Shift_JIS のバイト列は有効な UTF-8 ではないため、各バイトが latin-1 (ISO 8859-1)
として個別のコードポイントにマッピングされる。
encode('latin-1') で元のバイト列に戻し、decode('cp932') で正しい日本語に復元する。
Windows 由来のテキスト/CSV ファイルは Shift_JIS (CP932) であることが多い。
import pathlib
path = pathlib.Path('data.txt')
text = path.read_bytes().decode('cp932')
path.write_text(text, encoding='utf-8')
ファイルのエンコーディングが不明な場合:
import chardet
with open('data.txt', 'rb') as f:
raw = f.read(10000) # 先頭 10KB で判定
result = chardet.detect(raw)
print(result) # {'encoding': 'SHIFT_JIS', 'confidence': 0.99, ...}
chardet は pixi で導入: pixi add --pypi chardet
import pathlib
for p in pathlib.Path('.').glob('*.TXT'):
try:
text = p.read_bytes().decode('cp932')
p.write_text(text, encoding='utf-8')
print(f'Converted: {p}')
except UnicodeDecodeError:
print(f'Skipped (not CP932): {p}')
Windows テキストは改行が CRLF (\r\n) の場合がある。
必要に応じて LF に変換:
text = text.replace('\r\n', '\n')
7z x で展開 — Deflate64 対応latin-1 → cp932 デコードcp932 → utf-8すべて該当しない場合もある (例: UTF-8 で書かれた Deflate 圧縮の ZIP)。 エラーや文字化けが出た項目だけ対処すればよい。