Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。2,214件1Swift3にて、Shift-JISでURLをエンコードする必要が出てきたのですが、String.addingPercentEscapesが非推奨になっており、代わりにString.addingPercentEncodingを使用するように警告が出てしまいました。調べてみたのですが、String.addingPercentEscapesを使用せずにShift-JISでURLエンコードを行う方法が分からなかったため、ご教授いただきたいです。票1本来なら、アプリ側をSJISに対応させるのではなく、サーバー側をUTF-8に対応させるのが筋だと思うのですが...。AppleがSJIS対応のURLエンコード機能をiOSやSwiftの標準ライブラリーに再度付け加える可能性は極めて低いでしょうから、全部自前で処理してやる必要があります。こんな感じになるでしょう。//->%8D%A1%8E%9ESJIS%82%CC%83V%83X%83e%83%80%82%C8%82%F1%82%C4%81c通常SJISと名乗っているシステムは、Windows拡張文字も受け取れることが多いので、上記ではString.Encoding.shiftJISではなく、Windows-31J相当のエンコーディングを使用しています。実際にこれがデコードできるかどうかは、サーバーサイドが、どうパーセントエンコーディングを処理しているかによりますので、果たして上記のコードが無事に動くかどうかはなんとも言えません。個の銅バッジ今回2000年代に作成されたWebページに対してスクレイピングを行うためにSJISによるパーセントエンコーディングが必要でした...。指示いただいたコード無事に動きました、ありがとうございました。さん、ご報告ありがとうございます。現実の開発はいろいろ大変ですね。回答に提示したコードは、かなり一般的に作ったつもりですが、昔のサイトはパーセントエンコードを独自解釈で処理している場合もあり、うまく動かないサイトが出てくるかもしれません。何かありましたらコメント等でお知らせください。11:10同じことをする必要があり参考にさせて頂いたのですが、上手くエスケープできない場合がありました。バイトと一致するからではないかと思います。これを回避するには、SJISの1バイト目の文字(%81〜9F、%E0〜EF)を判定して、それらが来たら次のバイトは無条件でパーセントエスケープする必要があるかと思います。SJISのシステム早くなくしたいですね。さん、コメントありがとうございます。この回答では「全角バックスラッシュ」のような場合は意図的に"%81_"を出力するように作ってあります。さんの書かれたような出力を出すように作っていたかもしれません。SJISを使うこと自体が標準外の処理をしているので「なるべき」と表現して良いかどうかは疑問の残るところですが。さんの書かれたような出力をさせるのはそれほど大変でもありません。よろしければ別解として回答の形で書いてみてください。さん、確かに標準仕様があるわけではないので「なるべき」という表現は不適切だったかもしれません。OOPerさんのコードを参考に、私の関わっているシステムの都合に合わせたコードを作ったので回答に記載しておきます。件のコメントを表示1deprecatedの関数を使いますが、一応以下でSJISのURLエンコードができます。nil}OOPerさんのコードを参考に、deprecatedの関数を使わず上記と同じ出力となる(たぶん)ものを作りました。}}※Swift3だとsrc.mapはsrc.characters.mapとなるかもしれません。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。