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

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

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

Pythonistaは、iOS上でPythonプログラミングができる開発アプリです。さらに、Pythonの関数・変数などを自動で補完する便利なコードエディタや、PythonスクリプトをiOS上で多様な形で機能させる各種機能も内包しています。

Q&A

解決済

1回答

1484閲覧

Python サロゲートペア文字 

yuta1989

総合スコア65

Pythonista

Pythonistaは、iOS上でPythonプログラミングができる開発アプリです。さらに、Pythonの関数・変数などを自動で補完する便利なコードエディタや、PythonスクリプトをiOS上で多様な形で機能させる各種機能も内包しています。

0グッド

0クリップ

投稿2022/03/10 06:16

Pythonを使ってサロゲートペア文字を取り除く方法があれば教えていただきたいです。

サロゲートペア文字について
https://www.magata.net/memo/index.php?%A5%B5%A5%ED%A5%B2%A1%BC%A5%C8%A5%DA%A5%A2

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

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

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

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

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

y_waiwai

2022/03/10 06:25

なにをするためにそれをしたいんでしょうか
yuta1989

2022/03/10 06:29

Python経由でBacklogに登録する際にサロゲートペア文字が含まれていると失敗してしまうので、サロゲートペア文字を除去するような処理を入れたいと思っています。
chirimen

2022/03/10 06:44

確認ですが、入力は UTF-16 なのでしょうか?
yuta1989

2022/03/10 06:55

はい、入力は UTF-16 かと思います。
guest

回答1

0

ベストアンサー

入力の UTF-16 から Python の文字列内部表現への変換は正常にできているとして、
UTF-16 にエンコードしたときに2バイトにならない文字を削除するという方針ではどうでしょうか。

下記の例では、絵文字 "🙏" (U+0001F64F) を UTF-16 に変換すると 0xD8 0x3D 0xDE 0x4F の4バイトになることを利用して削除しています。

s = '絵文字"\U0001f64f"を含む文字列' # '絵文字"🙏"を含む文字列' a = ''.join(filter(lambda c: len(c.encode('utf-16-be')) == 2, s)) # '絵文字""を含む文字列'

投稿2022/03/10 07:59

chirimen

総合スコア189

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

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

yuta1989

2022/03/10 08:22

早速のご回答ありがとうございます!
yuta1989

2022/03/10 09:01

エンコードを"UTF-16"ではなくて"UTF-16BE"としている理由をおしえていただくことできますでしょうか?
chirimen

2022/03/10 23:40

UTF-16 で試したらBOMがついて通常文字が4バイトになったからです。 BOM付き4バイトを OK とするより、BOMなし2バイトOKの方が読みやすいと思ったので UTF-16-BE にしました。 UTF-16-LE でなく UTF-16-BE にしたのは、バイト列を表示して確認する際に読みやすいからで、こちらは判定には特に関係しません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問