質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
ASCII

ASCIIは、米国規格協会(ANSI)が制定したコンピューターの情報交換のための文字コードの一つ。アルファベットや数字などを1文字当たり7ビットで表します。英数字を表示する文字コードの中で最も高い互換性を持ち、多くの通信機器に利用されています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Unicode

Unicodeはエンコーディングの標準規格です。1つの文字コード体系で多国語の表現を可能にすることを目指して作られています。

Q&A

解決済

3回答

5321閲覧

pythonでus-asciiで書いてあるファイルを開きたい

JyonstyK

総合スコア14

ASCII

ASCIIは、米国規格協会(ANSI)が制定したコンピューターの情報交換のための文字コードの一つ。アルファベットや数字などを1文字当たり7ビットで表します。英数字を表示する文字コードの中で最も高い互換性を持ち、多くの通信機器に利用されています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Unicode

Unicodeはエンコーディングの標準規格です。1つの文字コード体系で多国語の表現を可能にすることを目指して作られています。

0グッド

0クリップ

投稿2017/10/07 07:11

訳あってus-asciiで書かれたファイルをpythonで開く必要があるのですが、

python

1file = codecs.open(filename,'r',encoding = 'us-ascii') 2file.read()

と書いて、インタプリタで1行ずつ実行しても、file.readを実行した時点で

unicodeDecodeError: 'ascii' codec can't decode byte 0x80 in position 3131: ordinal not in range(128)

というエラーが出てしまいます。read関数を呼ぶ時に内部的に型変換が起きてエラーが起きているようなので、それに代替する関数をライブラリで探しても特に見つかりません。

###補足情報
python3.6
バージョン管理はanaconda
実行環境はjupyterを使っています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

さて、そのファイルは本当に純粋なUS-ASCIIなのでしょうか。

エラーを読む限りは、「ファイル内に0x80のコードポイントが出てきて、それはUS-ASCIIとして解釈できないのでエラーとなっている」というように読めます。

バイナリエディタなどで、本当に0x80以降のコードポイントがないか確認してみてください。

投稿2017/10/07 07:36

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

JyonstyK

2017/10/07 07:57

このファイルは実の所A,T,C,G,.,N以外の文字は入っていないファイルなので、0x80以上のコードポイントは存在しません。今バイナリエディタで確認して見たところ、やはり存在しませんでした。 ご指摘は有り難いのですが、そこに原因は無いと私は考えています。
guest

0

調べてみた所参照しているファイルが、意図している塩基配列が入っているファイルではなくて.DS_storeでした。
そりゃasciiで読めずにエラー起きますよ。
完全に不注意でした。
巻き込んでしまって申し訳ありません。

投稿2017/10/07 08:50

JyonstyK

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ちょっと興味があったので調べてみました。
下記リンクによると文字のエンコードはOS依存のようです。
手元にus-asciiで書かれたファイルがないため確認できませんが、
localを変更することにより文字コードを開くことに対応できませんか?
[http://qiita.com/tell-k/items/9320338a7fbc7dcd52d4][リンク内容]

投稿2017/10/07 07:45

編集2017/10/07 07:48
GOTA77

総合スコア160

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

JyonstyK

2017/10/07 08:13

回答ありがとうございます。 初めに、locale.getpreferredencoding()を試して見た所、既にLocaleが'US-ascii'になっていました。 試しにsetlocaleを試してみた所、やはり同様のエラーが出ました。 逆に、別のファイルをutf-8で開く処理を同じソースの中で行っているのですが、そちらも問題なく起動できました。localeのご指摘は目から鱗だったのですが恐らくこの問題に関係ないと思います。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問