うーん、あなたの質問から私はこの点について完全に明確ではありませんが、何らかの変換が必要だったので、少なくとも人間が読める何かが必要だと思いますか?
各 OS には異なる制限があるかもしれませんが、ユーザー名で何が受け入れられるかを調べたりテストしたりできるプラットフォームに十分近いですか? 置換を行うためだけに使用できる 3 つの「特殊な」文字を見つけることができれば、問題ありませ'@', '.', '_'
ん。(それは包括的ですか?そうでない場合は、それらすべてを知っていることを確認する必要があります。そうしないと、衝突する可能性があります。)POSIX標準があるかどうかを少し検索しましたが、何も見つかりませんでした。何が有効かをテストできれば、それが最も直接的なルートになると思います。
特殊文字が 1 つでもあれば、URL エンコーディングを行うことができます。利用できる場合は「%」を使用し、利用できない場合は何でも選択して「!」と言ってから{ '@'->'!40", '_'->'!5F', '.'-> '!2E' }
. (仕様 [RFC1738] http://www.rfc-editor .org/rfc/rfc1738.txt ) は文字を US-ASCII として定義しているので、たとえばウィキペディアの ASCII 記事でテーブルを見つけて、そこで正しい 16 進数を調べることができます。) または、独自の単純なマッピングを行うこともできます。 ASCII セット全体は必要ありません。エスケープ文字ごとに 2 文字のマップを作成し、たとえば、'!a','!u','!p'
アットマーク、アンダースコア、ピリオドを使用できます。
「%」と「!」などの 2 つの特殊文字がある場合、、、、などの文字を表すテキストを区切ることができ%at!
ます。(これはほとんど html スタイルのエンコーディングですが、'&' と ';' の代わりに利用可能なものを使用しており、独自のニーモニックを作成しています。) もう 1 つのアイデアは、シンボルの実行を使用して、変換された文字を決定します。各新しい文字は、どのシンボルが使用されているかをフロップします。(許可されていない文字を 2 つ並べて配置する必要がある場合、これにより便利に実行が停止します。) したがって、ピリオドが 1、アンダースコアが 2、アットマークが 3 の '%' と '!' を仮定すると、になります。他にもバリエーションがありますが、これはコーディングが簡単です。&us!
'&pd!'
'mickey._sample_@fake.out'
'mickey%!!sample%%!!!fake%out'
これがどれもオプションではない場合 (たとえば、シンボルがまったくなく、[a-zA-Z0-9] だけ)、Base64 の回答はほぼ正しいと思います。実際、単純な置換以外の何かに到達すると (さらにはそれさえも)、それが目標である場合、入力するのがすでに難しくなっています。しかし、メールをほとんど読めるようにする必要がある場合は、何らかのエスケープを実装する必要があります。'0' をエスケープ文字として使用することを考えているので、'0' は '00' になり、'@' は '01' になり、'.' になります。は「02」になり、「_」は「03」になります。だから今、'mickey01._sample_@fake.out'
なるでしょう'mickey0010203sample0301fake02out'
。美しくはありませんが、うまくいくはずです。生の 0 をエスケープしたので、エスケープ文字として選択したもののマッピングを必ず定義してください。問題ないはずです..
それは私がatmについて考えることができるすべてです。:) 確かに、これらのユーザー名を生で読み取る必要がない場合、スラッシュを生成できるため、Base64 は明らかに機能しないようです。ええ、わかりました。各文字の 2 桁の US-ASCII 16 進値だけで完了です...] は良い方法です。デバッグされ、十分にフィールドテストされたコードがたくさんあり、問題を非常に簡単に解決します。:)