0

PHP4+mySQL4 ベースのプロジェクトが Django 1.1 プロジェクトに投稿され、いくつかの文字が混同されます。
この方法で置き換えるための最良の (最も効率的な) 方法は何ですか?
私にとっての問題は、それらの文字の値を取得できないことです。それを行うためのオンラインツールはありますか?

textField にさまざまな文字があり、この方法でそれらを置き換えたい:

àèæëáðøûþ => ąčęėįšųūž
ÀÈÆËÁÐØÛÞ => ĄČĘĖĮŠŲŪŽ

コードをクリーンアップしなければならない同様のケースがあったので、これを使用しました:

def clean(string):
     return ''.join([c for c in string if ord(c) > 31 or ord(c) in [9, 10, 13]] )

更新: Django デバッグ メッセージ (replace_from:replace_to) を見て、Unicode 値の抽出に成功しました:

{'\xe0':'\u0105', '\xe8':'\u010d', '\xe6':'\u0119', '\xeb':'\u0117', '\xe1':'\u012f',
 '\xf0':'\u0161', '\xf8':'\u0179', '\xfb':'\u016b', '\xfe':'\u017e',
 '\xc0':'\u0104', '\xc8':'\u010c', '\xc6':'\u0118', '\xcb':'\u0116', '\xc1':'\u012e',
 '\xd0':'\u0160', '\xd8':'\u0172', '\xdb':'\u016a', '\xde':'\u017d'

したがって、主な問題は残ります-交換

4

3 に答える 3

2

メソッドを試してくださいstr.replace()- ユニコード文字列で動作するはずです。

str.replace(old, new[, count])

部分文字列 old をすべて new に置き換えた文字列のコピーを返します。オプションの引数 count が指定されている場合、最初の count 個の出現のみが置き換えられます。

old文字列と文字列が Unicode 型であることを確認してくださいnew(入力データにも適用されます)。

入力 (非 Unicode) 文字列がエンコードされると想定されているものを見つけます。たとえば、エンコードされている可能性がありlatin1ます。組み込みstr.decode()メソッドを使用してデータの Unicode バージョンを作成し、それを にフィードしstr.replace()ます。

>>> unioldchars = oldchars.decode("latin1")
>>> newdata = data.replace(unioldchars, newchars)
于 2011-06-08T15:25:03.550 に答える
0

string.translate (s, table[, deletechars])

deletechars (存在する場合) にある s からすべての文字を削除し、table を使用して文字を変換します。これは、序数によってインデックス付けされた、各文字値の変換を与える 256 文字の文字列でなければなりません。table が None の場合、文字削除ステップのみが実行されます。

http://docs.python.org/library/string.html#string.maketransも参照してください。

于 2011-06-09T08:59:03.620 に答える
0

私は自分でやります。複数の効率的な置換が必要な場合、組み込みの replace 関数はほとんど役に立ちません。

これを見てください:http://code.activestate.com/recipes/81330-single-pass-multiple-replace/

編集:待って、テキストボックスのように、クライアント側で置換を行いたいですか?

于 2011-06-08T15:22:00.353 に答える