teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

訂正。

2017/12/06 04:45

投稿

fuzzball
fuzzball

スコア16733

answer CHANGED
@@ -10,4 +10,37 @@
10
10
  ```swift
11
11
  "@abcdefg".addingPercentEncoding(withAllowedCharacters: .alphanumerics)
12
12
  //=> %40abcdefg
13
- ```
13
+ ```
14
+
15
+ # 訂正
16
+
17
+ メタ文字はメタ文字でも、NSLogのメタ文字でした。
18
+
19
+ ```swift
20
+ var replace = base.replacingOccurrences(of: "@", with: "%40")
21
+ print("replace 1 :(replace)")
22
+ //=> replace 1 :https://line.me/R/ti/p/%40abcdefg
23
+ ```
24
+
25
+ これで変換自体は正しくできています。
26
+
27
+ おかしかったのはNSLogの使い方で、
28
+
29
+ ```swift
30
+ NSLog("replace 1 :(replace)") //これは
31
+ NSLog("replace 1 :https://line.me/R/ti/p/%40abcdefg") //これと同じ意味
32
+ ```
33
+
34
+ なので、`%40a`という書式を指定していることになります。さらに引数の指定無し。
35
+ %aというのは浮動小数点の16進表記(?)だそうで、
36
+ `空白` + `0x0p+0` + `bcde` = ` 0x0p+0bcdefg`
37
+ という表示になってしまっていたのです。
38
+
39
+ 正しくは、
40
+
41
+ ```swift
42
+ NSLog("replace 1 :%@", replace)
43
+ //=> replace 1 :https://line.me/R/ti/p/%40abcdefg
44
+ ```
45
+
46
+ となります。

1

.

2017/12/06 04:45

投稿

fuzzball
fuzzball

スコア16733

answer CHANGED
@@ -5,7 +5,7 @@
5
5
  //=> https://line.me/R/ti/p/%40abcdefg
6
6
  ```
7
7
 
8
- URLエスケしたいなら、
8
+ 汎用的にURLエンコしたいなら、
9
9
 
10
10
  ```swift
11
11
  "@abcdefg".addingPercentEncoding(withAllowedCharacters: .alphanumerics)