2017-03-10 1 views
1

基本的に私は字幕プロジェクトをやっています。 非常に複雑な、しかし、私はちょうど、変換ASSファイル内のすべての行の行の後に行を挿入したい(現在はまだ実験でtxtファイル)字幕プロジェクト:どのようにユニコードの読み込みの失敗を解決するには?

Untouched lines. I won't talk about Aegisub problems here

対話:0,0:00 :00.00,0:00:03.90、Default ,, 0,0,0、、こんにちは、ビューア。これはリアセンブラ、ある

対話:0,0:00:03.90,0:00:07.04、デフォルト,, 0,0,0、我々は彼らの部品の形で日常のオブジェクトを取るショー

Dialogue:0,0:00:07.04,0:00:10.24、Default ,, 0,0,0、、そしてそれらを一緒に戻すのが非常にゆっくりです。

目的: '\N{\3c&HAA0603&\fs31\b1}'

Modified lines, still Aegisub stuff

対話を付加対話セクションのすべての行:0,0:00:00.00,0:00:03.90、デフォルト,, 0 、0,0、、こんにちは、視聴者。これは\ Nリアセンブラ、ある{\ 3C & & HAA0603 fs31の\ B1を\}

ダイアログ:0,0:00:03.90,0:00:07.04、デフォルト,, 0,0,0、ショー我々は、それらのコンポーネント形式の\ Nで日常のオブジェクトを取るここで、{\ 3C & & HAA0603 \ fs31の\ B1を}

ダイアログ:0,0:00:07.04,0:00:10.24、デフォルト,, 0,0,0 ,,と非常にゆっくりと、戻って一緒にそれらを置く\ N {\ 3C & HAA0603 & fs31の\ b1の\}

のPython 3.xのコード:。

text1 = open('d:\Programs\sub1.txt','r') 
text2 = open('e:\modsub.ass','w+') 

alltext1 = text1.read() 
lines = alltext1.split('\n') 
for i in range(lines.index('[Events]')+1,len(lines)): 
    lines[i] += ' hello ' 
print(lines) 
text2.write(str(lines)) 
text1.close() 
text2.close() 

1.Pythonは、出力に影響を与えることなく、それに対処する方法

'\N{\3c&HAA0603&\fs31\b1}' 
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-23: unknown Unicode character name 

ユニコードでは、明らかに、その内の1つのまたは2つの文字を認識しませんか?

「対話:0,0:00:07.04,0:00:10.24、デフォルト,, 0

たら、2.私は字幕コードの代わりに 'ハロー' 使用、出力は次ました、0,0、、そしてそれらを一緒に、非常にゆっくり戻してください。 hello '、' Dialogue:0,0:00:10.24,0:00:11.72、Default ,, 0,0,0、それはとてもいい感じです。 hello '、' Dialogue:0,0:00:11.72,0:00:13.36、Default ,, 0,0,0、、Oh、yes。あれ見てよ! hello '、

などのように、行の後の行の代わりに配置できます。 弦をちょうど整列させて引用符をつけていく方法は?

+0

このコードでは、 'unicodeescape'コーデックを使用するものはありません。すべてのコードを共有していますか? –

+0

@MarkRansom文字列リテラル ''\ N {\ 3c&HAA0603&\ fs31 \ b1}'は、無効なユニコード名のエスケープであるため、このエラーが発生します。いずれにしても、Opはおそらく '' hello ''で置き換えられたはずなので、デバッグは難しい問題になります。 – Bakuriu

+0

@Bakuriuはそれをありがとう、それは私を解決にまっすぐに導いた。 Pythonインタプリタ自体が文字列リテラルをデコードしようとしていたことは私には決してありませんでした! –

答えて

0

生の文字列リテラルを使用します。置き換え:

'\N{\3c&HAA0603&\fs31\b1}' 

で:

r'\N{\3c&HAA0603&\fs31\b1}' 

このように、インタプリタが存在しない\3c&HAA0603&\fs31\b1という名前のUnicode文字を探すためにしようとはしません。


>>> '\N{\3c&HAA0603&\fs31\b1}' 
    File "<stdin>", line 1 
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-23: unknown Unicode character name 
>>> r'\N{\3c&HAA0603&\fs31\b1}' 
'\\N{\\3c&HAA0603&\\fs31\\b1}' 
>>> print(r'\N{\3c&HAA0603&\fs31\b1}') 
\N{\3c&HAA0603&\fs31\b1} 
0

問題は、あなたがそれらをエスケープせず、その中に\文字で文字列を使用しているということです。あなたはそれらを倍増させるか、r''記法を使用する必要があります。

lines[i] += '\\N{\\3c&HAA0603&\\fs31\\b1}' 

したり、他の問題については

lines[i] += r'\N{\3c&HAA0603&\fs31\b1}' 

は、あなたは文字通りの表現を示す str(lines)を書いています。代わりに '\n'.join(lines) + '\n'を使用してください。

関連する問題