- Python
unicodeescapeエラーの直し方|Windowsのパス
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape は、文字列に書いた Windows のパスの \U(C:\Users の部分)が、Unicode の文字を表す記号として読まれたときのエラーです。
path = "C:\Users\taro\data.csv" # ← \U が「\U + 16進数8桁」として読まれる
直し方は、次の3つのどれかです。
| 直し方 | 書き方 | 向いている場面 |
|---|---|---|
① 文字列の前に r を付ける(raw 文字列) |
r"C:\Users\taro\data.csv" |
パスをコピーして貼り付けるとき。一番手軽 |
② \ を / に変える |
"C:/Users/taro/data.csv" |
/ はエスケープの記号ではない |
③ \ を2つ重ねる |
"C:\\Users\\taro\\data.csv" |
短いパス |
| ④ pathlib を使う | Path(r"C:\Users\taro") / "data.csv" |
パスを組み立てるとき |
確認環境:Python 3.10・3.11・3.12・3.13・3.14 で、エラー文と結果を確かめました(確認日 2026年10月11日)。エラー文は5つの版で同じでした。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「unicodeescapeエラーの直し方|Windowsのパス」
なぜ \U でエラーになるのか
Python の文字列の中では、\ は「次の文字と組み合わせて特別な文字を表す」記号(エスケープシーケンス)です。
| 書いた文字 | Python の読み方 | パスでは |
|---|---|---|
\U + 16進数8桁 |
Unicode の文字(例:\U0001f40d は 🐍) |
C:\Users の \Us は16進数でないので エラー |
\u + 16進数4桁 |
Unicode の文字 | C:\users(小文字)でも エラー |
\x + 16進数2桁 |
文字コードで指定した文字 | C:\xampp で エラー |
\N{名前} |
名前で指定した文字 | D:\Nakamura で エラー |
\n・\t・\r・\a・\b・\f・\v |
改行・タブなどの制御文字 | エラーにならず、別の文字に変わる |
Python の公式ドキュメントでは、\U のあとには16進数がちょうど8桁、\u のあとには4桁が必要と説明されています。C:\Users の \U のあとは sers なので、8桁に足りず「truncated(途中で切れた)」と表示されます。
パスによって、エラー文が変わる
確認環境で、パスの書き方ごとのエラー文を確かめました。
| 書いたパス | エラー文の最後の部分 |
|---|---|
"C:\Users\taro" |
truncated \UXXXXXXXX escape |
"C:\users\taro" |
truncated \uXXXX escape |
"C:\xampp\htdocs" |
truncated \xXX escape |
"D:\Nakamura\a.txt" |
malformed \N character escape |
4つとも (unicode error) 'unicodeescape' で始まり、原因は同じです。position 2-3 は、文字列の中の何文字目でつまずいたか(0 から数える)を表しています。
直し方① raw 文字列(r を付ける)
path = r"C:\Users\taro\data.csv"
print(path) # C:\Users\taro\data.csv
文字列の前に r を付けると、\ が特別な意味を持たなくなります。 エクスプローラーのアドレスバーからコピーしたパスを、そのまま貼り付けられます。
注意:raw 文字列は \ で終われない
folder = r"C:\Users\taro\" # 最後が \
SyntaxError: unterminated string literal (detected at line 1); perhaps you escaped the end quote?
raw 文字列でも、最後の \ は閉じる " を打ち消してしまいます(公式ドキュメントにも「raw 文字列は、奇数個の \ で終われない」とあります)。フォルダのパスは、最後の \ を書かないか、pathlib でつなぎます。
| 書き方 | 結果 |
|---|---|
r"C:\Users\taro\" |
SyntaxError |
r"C:\Users\taro" |
OK(最後の \ を書かない) |
r"C:\Users\taro" + "\\" |
OK |
直し方② / 区切りにする
path = "C:/Users/taro/data.csv"
/ はエスケープの記号ではないので、エラーになりません。pathlib の PureWindowsPath は、/ 区切りで書いたパスを Windows のパス(C:\Users\taro\data.csv)として扱えることを確認しました。
直し方④ pathlib でつなぐ
from pathlib import Path
base = Path(r"C:\Users\taro")
path = base / "data" / "sales.csv" # / でつなぐ
パスを文字列の + でつながず、/ 演算子でつなぐと、区切り文字の付け忘れ・付けすぎを防げます。 pathlib の使い方は、既存の記事「Python pathlibの使い方|ファイル操作逆引き70例と実行結果」で扱っています。
エラーにならずに、パスが壊れる例(要注意)
\U はエラーになるので気づけますが、\n・\t などはエラーにならず、別の文字に変わります。
p = "C:\data\new\test.csv"
print(repr(p), len(p))
'C:\\data\new\test.csv' 18
| 書いた部分 | 変わった文字 |
|---|---|
\n(\new の先頭) |
改行 |
\t(\test の先頭) |
タブ |
\a(\a.txt の先頭) |
ベル文字(\x07) |
\d(\data の先頭) |
変わらない(\d のまま) |
このパスで open(p) を実行すると、次のように表示されました。
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\data\new\test.csv'
ファイルは存在するのに「見つからない」と表示され、原因に気づきにくい形です。エラー文の中に \n・\t が \\ でなく1本の \ で表示されていたら、文字が変わっています。Windows のパスは、最初から r"..." で書くと、この問題も防げます。
Python 3.12 以降の SyntaxWarning
\d・\w のように、Python が知らない組み合わせは、エラーにならず、そのまま \d として残ります。ただし、版によって警告の出方が違いました。
| 版 | "C:\data\report.csv" の結果 |
|---|---|
| 3.10・3.11 | 警告なし |
| 3.12・3.13 | SyntaxWarning: invalid escape sequence '\d' |
| 3.14 | SyntaxWarning: "\d" is an invalid escape sequence. Such sequences will not work in the future. Did you mean "\\d"? A raw string is also an option. |
公式ドキュメントでは、3.12 から SyntaxWarning になり、将来の版では SyntaxError になると説明されています。今は動いていても、警告が出ているパスや正規表現("\d+" など)は、r"..." に直しておきます。
import re
re.findall("\d+", "a12b3") # 3.12 以降は SyntaxWarning
re.findall(r"\d+", "a12b3") # r を付ける
確認の手順(チェックリスト)
| 順番 | 確認すること | 直し方 |
|---|---|---|
| 1 | エラー文に unicodeescape があるか |
ある → パスの \ が原因 |
| 2 | エラーの行の文字列に \U・\u・\x・\N があるか |
r"..." にする |
| 3 | パスの最後が \ で終わっていないか |
最後の \ を消す、または pathlib |
| 4 | FileNotFoundError のパスに \n・\t が見えるか |
r"..." にする |
| 5 | SyntaxWarning が出ていないか | 正規表現も r"..." にする |
よくある質問
Q. 設定ファイルから読み込んだパスでも起きますか。
A. このエラーは、プログラムの中に直接書いた文字列を Python が読むときだけ起きます。テキストファイルに C:\Users\taro\new.csv と書いて読み込むと、\ はそのまま残りました。ただし JSON は JSON のエスケープの規則があり、"C:\Users\taro" と書くと json.load で JSONDecodeError: Invalid \escape になりました。 JSON では "C:\\Users\\taro" と \ を重ねます。
Q. ファイルが見つからないエラーは、別の原因ですか。
A. パスの \ が正しくても、実行した場所(カレントディレクトリ)によって見つからないことがあります。関連記事の「FileNotFoundError: [Errno 2]の直し方|Python」で扱っています。
まとめ
C:\Usersの\Uが、Unicode の文字の記号として読まれたエラー- 直し方は
r"C:\Users\..."、/区切り、\\、pathlib - raw 文字列は
\で終われない \n・\tを含むパスは、エラーにならずに壊れる(FileNotFoundError になる)- 3.12 以降は
\dなどで SyntaxWarning。将来は SyntaxError になる予定
参考・出典
確認日はいずれも 2026年10月11日です。
- Python ドキュメント「Lexical analysis」(文字列リテラルとエスケープシーケンス):https://docs.python.org/3/reference/lexical_analysis.html
- Python ドキュメント「pathlib」:https://docs.python.org/3/library/pathlib.html
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「unicodeescapeエラーの直し方|Windowsのパス」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。