[{"data":1,"prerenderedAt":1729},["ShallowReactive",2],{"docs-page:\u002Fdocs\u002Fguides\u002Fencoding":3,"docs-navigation":1362,"docs-surround:\u002Fdocs\u002Fguides\u002Fencoding":1502,"icon:building-bank":1507,"icon:building-store":1533,"icon:chart-bar":1548,"icon:chart-pie":1561,"icon:code":1568,"icon:discount":1578,"icon:heart-handshake":1592,"icon:mail-forward":1605,"icon:messages":1618,"icon:microphone-2":1625,"icon:photo":1632,"icon:plug-connected":1645,"icon:school":1664,"icon:speakerphone":1671,"icon:stethoscope":1681,"icon:trophy":1697,"icon:user-plus":1716},{"id":4,"title":5,"body":6,"description":1349,"extension":1350,"group":1351,"meta":1352,"navTitle":1353,"navigation":1354,"path":1355,"rawbody":1356,"seo":1357,"status":1358,"stem":1359,"updated":1360,"__hash__":1361},"docs\u002Fdocs\u002F06.guides\u002F01.encoding.md","Character encoding and message length",{"type":7,"value":8,"toc":1338},"minimark",[9,13,30,33,38,45,828,833,843,1008,1015,1039,1042,1045,1048,1052,1060,1137,1140,1145,1152,1156,1159,1237,1245,1255,1259,1275,1286,1289,1331],[10,11,12],"p",{},"Send all text as UTF-8. Wire2Air then delivers each message in one of two encodings:",[14,15,16,24],"ul",{},[17,18,19,23],"li",{},[20,21,22],"strong",{},"GSM 03.38"," (the GSM 7-bit default alphabet), when every character in the message is in it.",[17,25,26,29],{},[20,27,28],{},"Unicode"," (UCS-2), as soon as one character is not. The whole message switches, not just that character.",[10,31,32],{},"The encoding decides how many characters fit in one message, and so how many credits a message uses.",[34,35,37],"h2",{"id":36},"gsm-0338-alphabet","GSM 03.38 alphabet",[10,39,40,41,44],{},"GSM 03.38 covers the Latin alphabet, digits, common punctuation, some accented letters and a few Greek capitals. The basic table has 128 positions; each character counts as ",[20,42,43],{},"one",":",[46,47,48,81],"table",{},[49,50,51],"thead",{},[52,53,54,57,60,63,66,69,72,75,78],"tr",{},[55,56],"th",{},[55,58,59],{},"0x00",[55,61,62],{},"0x10",[55,64,65],{},"0x20",[55,67,68],{},"0x30",[55,70,71],{},"0x40",[55,73,74],{},"0x50",[55,76,77],{},"0x60",[55,79,80],{},"0x70",[82,83,84,130,177,224,271,318,365,412,459,506,553,597,642,689,734,781],"tbody",{},[52,85,86,92,98,103,106,111,116,121,126],{},[87,88,89],"td",{},[20,90,91],{},"0x0",[87,93,94],{},[95,96,97],"code",{},"@",[87,99,100],{},[95,101,102],{},"Δ",[87,104,105],{},"space",[87,107,108],{},[95,109,110],{},"0",[87,112,113],{},[95,114,115],{},"¡",[87,117,118],{},[95,119,120],{},"P",[87,122,123],{},[95,124,125],{},"¿",[87,127,128],{},[95,129,10],{},[52,131,132,137,142,147,152,157,162,167,172],{},[87,133,134],{},[20,135,136],{},"0x1",[87,138,139],{},[95,140,141],{},"£",[87,143,144],{},[95,145,146],{},"_",[87,148,149],{},[95,150,151],{},"!",[87,153,154],{},[95,155,156],{},"1",[87,158,159],{},[95,160,161],{},"A",[87,163,164],{},[95,165,166],{},"Q",[87,168,169],{},[95,170,171],{},"a",[87,173,174],{},[95,175,176],{},"q",[52,178,179,184,189,194,199,204,209,214,219],{},[87,180,181],{},[20,182,183],{},"0x2",[87,185,186],{},[95,187,188],{},"$",[87,190,191],{},[95,192,193],{},"Φ",[87,195,196],{},[95,197,198],{},"\"",[87,200,201],{},[95,202,203],{},"2",[87,205,206],{},[95,207,208],{},"B",[87,210,211],{},[95,212,213],{},"R",[87,215,216],{},[95,217,218],{},"b",[87,220,221],{},[95,222,223],{},"r",[52,225,226,231,236,241,246,251,256,261,266],{},[87,227,228],{},[20,229,230],{},"0x3",[87,232,233],{},[95,234,235],{},"¥",[87,237,238],{},[95,239,240],{},"Γ",[87,242,243],{},[95,244,245],{},"#",[87,247,248],{},[95,249,250],{},"3",[87,252,253],{},[95,254,255],{},"C",[87,257,258],{},[95,259,260],{},"S",[87,262,263],{},[95,264,265],{},"c",[87,267,268],{},[95,269,270],{},"s",[52,272,273,278,283,288,293,298,303,308,313],{},[87,274,275],{},[20,276,277],{},"0x4",[87,279,280],{},[95,281,282],{},"è",[87,284,285],{},[95,286,287],{},"Λ",[87,289,290],{},[95,291,292],{},"¤",[87,294,295],{},[95,296,297],{},"4",[87,299,300],{},[95,301,302],{},"D",[87,304,305],{},[95,306,307],{},"T",[87,309,310],{},[95,311,312],{},"d",[87,314,315],{},[95,316,317],{},"t",[52,319,320,325,330,335,340,345,350,355,360],{},[87,321,322],{},[20,323,324],{},"0x5",[87,326,327],{},[95,328,329],{},"é",[87,331,332],{},[95,333,334],{},"Ω",[87,336,337],{},[95,338,339],{},"%",[87,341,342],{},[95,343,344],{},"5",[87,346,347],{},[95,348,349],{},"E",[87,351,352],{},[95,353,354],{},"U",[87,356,357],{},[95,358,359],{},"e",[87,361,362],{},[95,363,364],{},"u",[52,366,367,372,377,382,387,392,397,402,407],{},[87,368,369],{},[20,370,371],{},"0x6",[87,373,374],{},[95,375,376],{},"ù",[87,378,379],{},[95,380,381],{},"Π",[87,383,384],{},[95,385,386],{},"&",[87,388,389],{},[95,390,391],{},"6",[87,393,394],{},[95,395,396],{},"F",[87,398,399],{},[95,400,401],{},"V",[87,403,404],{},[95,405,406],{},"f",[87,408,409],{},[95,410,411],{},"v",[52,413,414,419,424,429,434,439,444,449,454],{},[87,415,416],{},[20,417,418],{},"0x7",[87,420,421],{},[95,422,423],{},"ì",[87,425,426],{},[95,427,428],{},"Ψ",[87,430,431],{},[95,432,433],{},"'",[87,435,436],{},[95,437,438],{},"7",[87,440,441],{},[95,442,443],{},"G",[87,445,446],{},[95,447,448],{},"W",[87,450,451],{},[95,452,453],{},"g",[87,455,456],{},[95,457,458],{},"w",[52,460,461,466,471,476,481,486,491,496,501],{},[87,462,463],{},[20,464,465],{},"0x8",[87,467,468],{},[95,469,470],{},"ò",[87,472,473],{},[95,474,475],{},"Σ",[87,477,478],{},[95,479,480],{},"(",[87,482,483],{},[95,484,485],{},"8",[87,487,488],{},[95,489,490],{},"H",[87,492,493],{},[95,494,495],{},"X",[87,497,498],{},[95,499,500],{},"h",[87,502,503],{},[95,504,505],{},"x",[52,507,508,513,518,523,528,533,538,543,548],{},[87,509,510],{},[20,511,512],{},"0x9",[87,514,515],{},[95,516,517],{},"Ç",[87,519,520],{},[95,521,522],{},"Θ",[87,524,525],{},[95,526,527],{},")",[87,529,530],{},[95,531,532],{},"9",[87,534,535],{},[95,536,537],{},"I",[87,539,540],{},[95,541,542],{},"Y",[87,544,545],{},[95,546,547],{},"i",[87,549,550],{},[95,551,552],{},"y",[52,554,555,560,563,568,573,577,582,587,592],{},[87,556,557],{},[20,558,559],{},"0xA",[87,561,562],{},"line feed",[87,564,565],{},[95,566,567],{},"Ξ",[87,569,570],{},[95,571,572],{},"*",[87,574,575],{},[95,576,44],{},[87,578,579],{},[95,580,581],{},"J",[87,583,584],{},[95,585,586],{},"Z",[87,588,589],{},[95,590,591],{},"j",[87,593,594],{},[95,595,596],{},"z",[52,598,599,604,609,612,617,622,627,632,637],{},[87,600,601],{},[20,602,603],{},"0xB",[87,605,606],{},[95,607,608],{},"Ø",[87,610,611],{},"escape",[87,613,614],{},[95,615,616],{},"+",[87,618,619],{},[95,620,621],{},";",[87,623,624],{},[95,625,626],{},"K",[87,628,629],{},[95,630,631],{},"Ä",[87,633,634],{},[95,635,636],{},"k",[87,638,639],{},[95,640,641],{},"ä",[52,643,644,649,654,659,664,669,674,679,684],{},[87,645,646],{},[20,647,648],{},"0xC",[87,650,651],{},[95,652,653],{},"ø",[87,655,656],{},[95,657,658],{},"Æ",[87,660,661],{},[95,662,663],{},",",[87,665,666],{},[95,667,668],{},"\u003C",[87,670,671],{},[95,672,673],{},"L",[87,675,676],{},[95,677,678],{},"Ö",[87,680,681],{},[95,682,683],{},"l",[87,685,686],{},[95,687,688],{},"ö",[52,690,691,696,699,704,709,714,719,724,729],{},[87,692,693],{},[20,694,695],{},"0xD",[87,697,698],{},"carriage return",[87,700,701],{},[95,702,703],{},"æ",[87,705,706],{},[95,707,708],{},"-",[87,710,711],{},[95,712,713],{},"=",[87,715,716],{},[95,717,718],{},"M",[87,720,721],{},[95,722,723],{},"Ñ",[87,725,726],{},[95,727,728],{},"m",[87,730,731],{},[95,732,733],{},"ñ",[52,735,736,741,746,751,756,761,766,771,776],{},[87,737,738],{},[20,739,740],{},"0xE",[87,742,743],{},[95,744,745],{},"Å",[87,747,748],{},[95,749,750],{},"ß",[87,752,753],{},[95,754,755],{},".",[87,757,758],{},[95,759,760],{},">",[87,762,763],{},[95,764,765],{},"N",[87,767,768],{},[95,769,770],{},"Ü",[87,772,773],{},[95,774,775],{},"n",[87,777,778],{},[95,779,780],{},"ü",[52,782,783,788,793,798,803,808,813,818,823],{},[87,784,785],{},[20,786,787],{},"0xF",[87,789,790],{},[95,791,792],{},"å",[87,794,795],{},[95,796,797],{},"É",[87,799,800],{},[95,801,802],{},"\u002F",[87,804,805],{},[95,806,807],{},"?",[87,809,810],{},[95,811,812],{},"O",[87,814,815],{},[95,816,817],{},"§",[87,819,820],{},[95,821,822],{},"o",[87,824,825],{},[95,826,827],{},"à",[829,830,832],"h3",{"id":831},"extended-characters","Extended characters",[10,834,835,836,839,840,44],{},"Ten more characters are sent as the escape code (",[95,837,838],{},"0x1B",") followed by a second code, so each counts as ",[20,841,842],{},"two",[46,844,845,858],{},[49,846,847],{},[52,848,849,852,855],{},[55,850,851],{},"Character",[55,853,854],{},"Codes (hex)",[55,856,857],{},"Codes (decimal)",[82,859,860,875,888,903,918,933,948,963,978,993],{},[52,861,862,867,872],{},[87,863,864],{},[95,865,866],{},"€",[87,868,869],{},[95,870,871],{},"1B 65",[87,873,874],{},"27, 101",[52,876,877,880,885],{},[87,878,879],{},"form feed",[87,881,882],{},[95,883,884],{},"1B 0A",[87,886,887],{},"27, 10",[52,889,890,895,900],{},[87,891,892],{},[95,893,894],{},"[",[87,896,897],{},[95,898,899],{},"1B 3C",[87,901,902],{},"27, 60",[52,904,905,910,915],{},[87,906,907],{},[95,908,909],{},"\\",[87,911,912],{},[95,913,914],{},"1B 2F",[87,916,917],{},"27, 47",[52,919,920,925,930],{},[87,921,922],{},[95,923,924],{},"]",[87,926,927],{},[95,928,929],{},"1B 3E",[87,931,932],{},"27, 62",[52,934,935,940,945],{},[87,936,937],{},[95,938,939],{},"^",[87,941,942],{},[95,943,944],{},"1B 14",[87,946,947],{},"27, 20",[52,949,950,955,960],{},[87,951,952],{},[95,953,954],{},"{",[87,956,957],{},[95,958,959],{},"1B 28",[87,961,962],{},"27, 40",[52,964,965,970,975],{},[87,966,967],{},[95,968,969],{},"|",[87,971,972],{},[95,973,974],{},"1B 40",[87,976,977],{},"27, 64",[52,979,980,985,990],{},[87,981,982],{},[95,983,984],{},"}",[87,986,987],{},[95,988,989],{},"1B 29",[87,991,992],{},"27, 41",[52,994,995,1000,1005],{},[87,996,997],{},[95,998,999],{},"~",[87,1001,1002],{},[95,1003,1004],{},"1B 3D",[87,1006,1007],{},"27, 61",[10,1009,1010,1011,1014],{},"A line break written as ",[95,1012,1013],{},"\\r\\n"," (carriage return + line feed) is two basic characters, so it counts as two.",[1016,1017,1020],"callout",{"type":1018,"question":1019},"pending","OQ-15",[10,1021,1022,1023,1026,1027,1029,1030,1026,1032,1034,1035,1038],{},"The previous Send SMS page said these count as two characters: ",[95,1024,1025],{},"~ @ # % + = \u002F \\"," and ",[95,1028,1013],{},". In GSM 03.38 only ",[95,1031,999],{},[95,1033,909],{}," (and the rest of the extended table) count as two; ",[95,1036,1037],{},"@ # % + = \u002F"," are basic characters that count as one. This page gives the standard rule. Engineering has been asked to confirm how Wire2Air counts characters for billing.",[34,1040,28],{"id":1041},"unicode",[10,1043,1044],{},"If a message contains any character outside the two tables above (for example Chinese, Arabic or Japanese text, emoji, or typographic quotes), the whole message is sent as Unicode. Unicode allows any language, but fits fewer characters in each message.",[10,1046,1047],{},"Not every handset or carrier displays every Unicode character.",[34,1049,1051],{"id":1050},"message-length","Message length",[10,1053,1054,1055,1059],{},"One SMS holds 160 GSM characters or 70 Unicode characters. A longer message is split into parts that the phone joins back together (a ",[1056,1057,1058],"em",{},"concatenated"," message). Each part loses room to a 7-character header (the User Data Header) that tells the phone how to join them, so a part holds 153 GSM characters or 67 Unicode characters.",[46,1061,1062,1075],{},[49,1063,1064],{},[52,1065,1066,1069,1072],{},[55,1067,1068],{},"Parts",[55,1070,1071],{},"GSM 03.38, total characters",[55,1073,1074],{},"Unicode, total characters",[82,1076,1077,1087,1097,1107,1117,1127],{},[52,1078,1079,1081,1084],{},[87,1080,156],{},[87,1082,1083],{},"160",[87,1085,1086],{},"70",[52,1088,1089,1091,1094],{},[87,1090,203],{},[87,1092,1093],{},"306",[87,1095,1096],{},"134",[52,1098,1099,1101,1104],{},[87,1100,250],{},[87,1102,1103],{},"459",[87,1105,1106],{},"201",[52,1108,1109,1111,1114],{},[87,1110,297],{},[87,1112,1113],{},"612",[87,1115,1116],{},"268",[52,1118,1119,1121,1124],{},[87,1120,344],{},[87,1122,1123],{},"765",[87,1125,1126],{},"335",[52,1128,1129,1131,1134],{},[87,1130,391],{},[87,1132,1133],{},"918",[87,1135,1136],{},"402",[10,1138,1139],{},"Up to six parts can form one long message. Each part is billed as one message.",[1016,1141,1142],{"type":1018,"question":1019},[10,1143,1144],{},"The previous Send SMS (HTTP API) page said messages longer than 160 characters are rejected unless you contact sales; the encoding page said up to six parts are allowed. Which rule applies to which API, and on which accounts, has not been confirmed.",[1016,1146,1149],{"type":1147,"title":1148},"note","Corrected figures",[10,1150,1151],{},"The previous version of this table gave 965 characters for 5 parts and 718 for 6. At 153 characters a part the correct totals are 765 and 918.",[34,1153,1155],{"id":1154},"keep-messages-in-gsm","Keep messages in GSM",[10,1157,1158],{},"A single typographic character switches a message to Unicode and cuts it from 160 to 70 characters. Text pasted from a word processor is the usual cause. Replace:",[46,1160,1161,1171],{},[49,1162,1163],{},[52,1164,1165,1168],{},[55,1166,1167],{},"Instead of",[55,1169,1170],{},"Use",[82,1172,1173,1192,1207,1225],{},[52,1174,1175,1188],{},[87,1176,1177,1180,1181,1184,1185],{},[95,1178,1179],{},"‘"," ",[95,1182,1183],{},"’"," (curly apostrophes) and ",[95,1186,1187],{},"`",[87,1189,1190],{},[95,1191,433],{},[52,1193,1194,1203],{},[87,1195,1196,1180,1199,1202],{},[95,1197,1198],{},"“",[95,1200,1201],{},"”"," (curly quotes)",[87,1204,1205],{},[95,1206,198],{},[52,1208,1209,1221],{},[87,1210,1211,1180,1214,1217,1218],{},[95,1212,1213],{},"–",[95,1215,1216],{},"—"," (dashes) and ",[95,1219,1220],{},"¬",[87,1222,1223],{},[95,1224,708],{},[52,1226,1227,1232],{},[87,1228,1229],{},[95,1230,1231],{},"…",[87,1233,1234],{},[95,1235,1236],{},"...",[10,1238,1239,1241,1242,1244],{},[95,1240,999],{},", ",[95,1243,969],{}," and the other extended characters stay in GSM but count as two each.",[10,1246,1247,1248,1254],{},"The dashboard's ",[171,1249,1253],{"href":1250,"rel":1251},"http:\u002F\u002Fmzone.wire2air.com\u002Fmserver\u002Fvas\u002FUnicodeDetect.aspx",[1252],"nofollow","Unicode Detect tool"," replaces common Unicode characters with GSM equivalents.",[34,1256,1258],{"id":1257},"url-encoding","URL encoding",[10,1260,1261,1262,1241,1264,1241,1266,1268,1269,1271,1272,1274],{},"Parameters must be URL-encoded (percent-encoded): reserved characters such as ",[95,1263,386],{},[95,1265,802],{},[95,1267,807],{}," and spaces, and every non-ASCII character, become ",[95,1270,339],{}," codes. Without encoding, an ",[95,1273,386],{}," in your text ends the parameter early.",[1276,1277,1284],"pre",{"className":1278,"code":1280,"filename":1281,"language":1282,"meta":1283},[1279],"language-text","text=A sample text & Message\ntext=A%20sample%20text%20%26%20Message\n","Before and after encoding","text","",[95,1285,1280],{"__ignoreMap":1283},[10,1287,1288],{},"Every HTTP library does this for you. Pass parameters as a map or dictionary rather than building the string by hand:",[14,1290,1291,1297,1303,1314,1325],{},[17,1292,1293,1294],{},"Python 3: ",[95,1295,1296],{},"urllib.parse.urlencode()",[17,1298,1299,1300],{},"Node: ",[95,1301,1302],{},"URLSearchParams",[17,1304,1305,1306,1309,1310,1313],{},"PHP: ",[95,1307,1308],{},"http_build_query()"," (or ",[95,1311,1312],{},"urlencode()"," for a single value)",[17,1315,1316,1317,1320,1321,1324],{},"C#: ",[95,1318,1319],{},"FormUrlEncodedContent",", or ",[95,1322,1323],{},"Uri.EscapeDataString()"," for a single value",[17,1326,1327,1328],{},"cURL: ",[95,1329,1330],{},"--data-urlencode",[10,1332,1333,1334,1337],{},"Encode each value once. Encoding a value and then handing it to a library that encodes again sends ",[95,1335,1336],{},"%2520"," instead of a space.",{"title":1283,"searchDepth":1339,"depth":1339,"links":1340},3,[1341,1345,1346,1347,1348],{"id":36,"depth":1342,"text":37,"children":1343},2,[1344],{"id":831,"depth":1339,"text":832},{"id":1041,"depth":1342,"text":28},{"id":1050,"depth":1342,"text":1051},{"id":1154,"depth":1342,"text":1155},{"id":1257,"depth":1342,"text":1258},"Which characters fit the GSM 03.38 alphabet, when a message switches to Unicode, how long messages are split into parts, and how to URL-encode text.","md",null,{},"Encoding and length",true,"\u002Fdocs\u002Fguides\u002Fencoding","---\ntitle: Character encoding and message length\nnavTitle: Encoding and length\ndescription: Which characters fit the GSM 03.38 alphabet, when a message switches to Unicode, how long messages are split into parts, and how to URL-encode text.\nupdated: '2026-10-06'\n---\n\nSend all text as UTF-8. Wire2Air then delivers each message in one of two encodings:\n\n- **GSM 03.38** (the GSM 7-bit default alphabet), when every character in the message is in it.\n- **Unicode** (UCS-2), as soon as one character is not. The whole message switches, not just that character.\n\nThe encoding decides how many characters fit in one message, and so how many credits a message uses.\n\n## GSM 03.38 alphabet\n\nGSM 03.38 covers the Latin alphabet, digits, common punctuation, some accented letters and a few Greek capitals. The basic table has 128 positions; each character counts as **one**:\n\n| | 0x00 | 0x10 | 0x20 | 0x30 | 0x40 | 0x50 | 0x60 | 0x70 |\n|---|---|---|---|---|---|---|---|---|\n| **0x0** | `@` | `Δ` | space | `0` | `¡` | `P` | `¿` | `p` |\n| **0x1** | `£` | `_` | `!` | `1` | `A` | `Q` | `a` | `q` |\n| **0x2** | `$` | `Φ` | `\"` | `2` | `B` | `R` | `b` | `r` |\n| **0x3** | `¥` | `Γ` | `#` | `3` | `C` | `S` | `c` | `s` |\n| **0x4** | `è` | `Λ` | `¤` | `4` | `D` | `T` | `d` | `t` |\n| **0x5** | `é` | `Ω` | `%` | `5` | `E` | `U` | `e` | `u` |\n| **0x6** | `ù` | `Π` | `&` | `6` | `F` | `V` | `f` | `v` |\n| **0x7** | `ì` | `Ψ` | `'` | `7` | `G` | `W` | `g` | `w` |\n| **0x8** | `ò` | `Σ` | `(` | `8` | `H` | `X` | `h` | `x` |\n| **0x9** | `Ç` | `Θ` | `)` | `9` | `I` | `Y` | `i` | `y` |\n| **0xA** | line feed | `Ξ` | `*` | `:` | `J` | `Z` | `j` | `z` |\n| **0xB** | `Ø` | escape | `+` | `;` | `K` | `Ä` | `k` | `ä` |\n| **0xC** | `ø` | `Æ` | `,` | `\u003C` | `L` | `Ö` | `l` | `ö` |\n| **0xD** | carriage return | `æ` | `-` | `=` | `M` | `Ñ` | `m` | `ñ` |\n| **0xE** | `Å` | `ß` | `.` | `>` | `N` | `Ü` | `n` | `ü` |\n| **0xF** | `å` | `É` | `\u002F` | `?` | `O` | `§` | `o` | `à` |\n\n### Extended characters\n\nTen more characters are sent as the escape code (`0x1B`) followed by a second code, so each counts as **two**:\n\n| Character | Codes (hex) | Codes (decimal) |\n|---|---|---|\n| `€` | `1B 65` | 27, 101 |\n| form feed | `1B 0A` | 27, 10 |\n| `[` | `1B 3C` | 27, 60 |\n| `\\` | `1B 2F` | 27, 47 |\n| `]` | `1B 3E` | 27, 62 |\n| `^` | `1B 14` | 27, 20 |\n| `{` | `1B 28` | 27, 40 |\n| `\\|` | `1B 40` | 27, 64 |\n| `}` | `1B 29` | 27, 41 |\n| `~` | `1B 3D` | 27, 61 |\n\nA line break written as `\\r\\n` (carriage return + line feed) is two basic characters, so it counts as two.\n\n::callout{type=\"pending\" question=\"OQ-15\"}\nThe previous Send SMS page said these count as two characters: `~ @ # % + = \u002F \\` and `\\r\\n`. In GSM 03.38 only `~` and `\\` (and the rest of the extended table) count as two; `@ # % + = \u002F` are basic characters that count as one. This page gives the standard rule. Engineering has been asked to confirm how Wire2Air counts characters for billing.\n::\n\n## Unicode\n\nIf a message contains any character outside the two tables above (for example Chinese, Arabic or Japanese text, emoji, or typographic quotes), the whole message is sent as Unicode. Unicode allows any language, but fits fewer characters in each message.\n\nNot every handset or carrier displays every Unicode character.\n\n## Message length\n\nOne SMS holds 160 GSM characters or 70 Unicode characters. A longer message is split into parts that the phone joins back together (a *concatenated* message). Each part loses room to a 7-character header (the User Data Header) that tells the phone how to join them, so a part holds 153 GSM characters or 67 Unicode characters.\n\n| Parts | GSM 03.38, total characters | Unicode, total characters |\n|---|---|---|\n| 1 | 160 | 70 |\n| 2 | 306 | 134 |\n| 3 | 459 | 201 |\n| 4 | 612 | 268 |\n| 5 | 765 | 335 |\n| 6 | 918 | 402 |\n\nUp to six parts can form one long message. Each part is billed as one message.\n\n::callout{type=\"pending\" question=\"OQ-15\"}\nThe previous Send SMS (HTTP API) page said messages longer than 160 characters are rejected unless you contact sales; the encoding page said up to six parts are allowed. Which rule applies to which API, and on which accounts, has not been confirmed.\n::\n\n::callout{type=\"note\" title=\"Corrected figures\"}\nThe previous version of this table gave 965 characters for 5 parts and 718 for 6. At 153 characters a part the correct totals are 765 and 918.\n::\n\n## Keep messages in GSM\n\nA single typographic character switches a message to Unicode and cuts it from 160 to 70 characters. Text pasted from a word processor is the usual cause. Replace:\n\n| Instead of | Use |\n|---|---|\n| `‘` `’` (curly apostrophes) and `` ` `` | `'` |\n| `“` `”` (curly quotes) | `\"` |\n| `–` `—` (dashes) and `¬` | `-` |\n| `…` | `...` |\n\n`~`, `|` and the other extended characters stay in GSM but count as two each.\n\nThe dashboard's [Unicode Detect tool](http:\u002F\u002Fmzone.wire2air.com\u002Fmserver\u002Fvas\u002FUnicodeDetect.aspx) replaces common Unicode characters with GSM equivalents.\n\n## URL encoding\n\nParameters must be URL-encoded (percent-encoded): reserved characters such as `&`, `\u002F`, `?` and spaces, and every non-ASCII character, become `%` codes. Without encoding, an `&` in your text ends the parameter early.\n\n```text [Before and after encoding]\ntext=A sample text & Message\ntext=A%20sample%20text%20%26%20Message\n```\n\nEvery HTTP library does this for you. Pass parameters as a map or dictionary rather than building the string by hand:\n\n- Python 3: `urllib.parse.urlencode()`\n- Node: `URLSearchParams`\n- PHP: `http_build_query()` (or `urlencode()` for a single value)\n- C#: `FormUrlEncodedContent`, or `Uri.EscapeDataString()` for a single value\n- cURL: `--data-urlencode`\n\nEncode each value once. Encoding a value and then handing it to a library that encodes again sends `%2520` instead of a space.\n",{"title":5,"description":1349},"current","docs\u002F06.guides\u002F01.encoding","2026-10-06","O3gyg3N52ivP5Oq83RTJR-eWLQrtKDkrKxtUmIJShDU",[1363],{"title":1364,"path":1365,"stem":1366,"children":1367,"navTitle":1369,"group":1351,"status":1358},"Wire2Air developer docs","\u002Fdocs","docs\u002F01.index",[1368,1370,1374,1378,1382,1386,1401,1424,1442,1485,1498],{"title":1364,"path":1365,"stem":1366,"navTitle":1369,"group":1351,"status":1358},"Overview",{"title":1371,"path":1372,"stem":1373,"navTitle":1351,"group":1371,"status":1358},"Getting started","\u002Fdocs\u002Fgetting-started","docs\u002F02.getting-started",{"title":1375,"path":1376,"stem":1377,"navTitle":1351,"group":1371,"status":1358},"Authentication","\u002Fdocs\u002Fauthentication","docs\u002F03.authentication",{"title":1379,"path":1380,"stem":1381,"navTitle":1351,"group":1371,"status":1358},"Errors","\u002Fdocs\u002Ferrors","docs\u002F04.errors",{"title":1383,"path":1384,"stem":1385,"navTitle":1351,"group":1371,"status":1358},"Rate limits","\u002Fdocs\u002Frate-limits","docs\u002F05.rate-limits",{"title":1387,"navTitle":1351,"group":1351,"status":1358,"path":1388,"stem":1389,"children":1390,"page":1400},"Guides","\u002Fdocs\u002Fguides","docs\u002F06.guides",[1391,1392,1396],{"title":5,"path":1355,"stem":1359,"navTitle":1353,"group":1351,"status":1358},{"title":1393,"path":1394,"stem":1395,"navTitle":1351,"group":1351,"status":1358},"Bulk messaging","\u002Fdocs\u002Fguides\u002Fbulk-messaging","docs\u002F06.guides\u002F02.bulk-messaging",{"title":1397,"path":1398,"stem":1399,"navTitle":1351,"group":1351,"status":1358},"Scheduling messages","\u002Fdocs\u002Fguides\u002Fscheduling","docs\u002F06.guides\u002F03.scheduling",false,{"title":1402,"path":1403,"stem":1404,"children":1405,"navTitle":1351,"group":1351,"status":1358},"REST API v1","\u002Fdocs\u002Frest","docs\u002F07.rest\u002F01.index",[1406,1407,1420],{"title":1402,"path":1403,"stem":1404,"navTitle":1369,"group":1351,"status":1358},{"title":1408,"navTitle":1351,"group":1351,"status":1358,"path":1409,"stem":1410,"children":1411,"page":1400},"Messages","\u002Fdocs\u002Frest\u002Fmessages","docs\u002F07.rest\u002F02.messages",[1412,1416],{"title":1413,"path":1414,"stem":1415,"navTitle":1351,"group":1351,"status":1358},"Send a message","\u002Fdocs\u002Frest\u002Fmessages\u002Fsend","docs\u002F07.rest\u002F02.messages\u002F01.send",{"title":1417,"path":1418,"stem":1419,"navTitle":1351,"group":1351,"status":1358},"List received messages","\u002Fdocs\u002Frest\u002Fmessages\u002Flist","docs\u002F07.rest\u002F02.messages\u002F02.list",{"title":1421,"path":1422,"stem":1423,"navTitle":1351,"group":1351,"status":1358},"Campaigns","\u002Fdocs\u002Frest\u002Fcampaigns","docs\u002F07.rest\u002F03.campaigns",{"title":1425,"path":1426,"stem":1427,"children":1428,"navTitle":1351,"group":1351,"status":1358},"Webhooks","\u002Fdocs\u002Fwebhooks","docs\u002F08.webhooks\u002F01.index",[1429,1430,1434,1438],{"title":1425,"path":1426,"stem":1427,"navTitle":1369,"group":1351,"status":1358},{"title":1431,"path":1432,"stem":1433,"navTitle":1351,"group":1351,"status":1358},"Inbound SMS","\u002Fdocs\u002Fwebhooks\u002Finbound-sms","docs\u002F08.webhooks\u002F02.inbound-sms",{"title":1435,"path":1436,"stem":1437,"navTitle":1351,"group":1351,"status":1358},"Inbound SMS and MMS","\u002Fdocs\u002Fwebhooks\u002Finbound-mms","docs\u002F08.webhooks\u002F03.inbound-mms",{"title":1439,"path":1440,"stem":1441,"navTitle":1351,"group":1351,"status":1358},"Delivery reports","\u002Fdocs\u002Fwebhooks\u002Fdelivery-reports","docs\u002F08.webhooks\u002F04.delivery-reports",{"title":1443,"path":1444,"stem":1445,"children":1446,"navTitle":1351,"group":1351,"status":1448},"HTTP API","\u002Fdocs\u002Fhttp-api","docs\u002F09.http-api\u002F01.index",[1447,1449,1453,1457,1461,1465,1469,1473,1477,1481],{"title":1443,"path":1444,"stem":1445,"navTitle":1369,"group":1351,"status":1448},"legacy",{"title":1450,"path":1451,"stem":1452,"navTitle":1351,"group":1351,"status":1448},"Send SMS","\u002Fdocs\u002Fhttp-api\u002Fsend-sms","docs\u002F09.http-api\u002F02.send-sms",{"title":1454,"path":1455,"stem":1456,"navTitle":1351,"group":1351,"status":1448},"Send MMS","\u002Fdocs\u002Fhttp-api\u002Fsend-mms","docs\u002F09.http-api\u002F03.send-mms",{"title":1458,"path":1459,"stem":1460,"navTitle":1351,"group":1351,"status":1448},"Credit balance","\u002Fdocs\u002Fhttp-api\u002Fcredit-balance","docs\u002F09.http-api\u002F04.credit-balance",{"title":1462,"path":1463,"stem":1464,"navTitle":1351,"group":1351,"status":1448},"Carrier lookup","\u002Fdocs\u002Fhttp-api\u002Fcarrier-lookup","docs\u002F09.http-api\u002F05.carrier-lookup",{"title":1466,"path":1467,"stem":1468,"navTitle":1351,"group":1351,"status":1448},"Keyword lookup","\u002Fdocs\u002Fhttp-api\u002Fkeyword-lookup","docs\u002F09.http-api\u002F06.keyword-lookup",{"title":1470,"path":1471,"stem":1472,"navTitle":1351,"group":1351,"status":1448},"Keyword register","\u002Fdocs\u002Fhttp-api\u002Fkeyword-register","docs\u002F09.http-api\u002F07.keyword-register",{"title":1474,"path":1475,"stem":1476,"navTitle":1351,"group":1351,"status":1448},"Keyword credits","\u002Fdocs\u002Fhttp-api\u002Fkeyword-credits","docs\u002F09.http-api\u002F08.keyword-credits",{"title":1478,"path":1479,"stem":1480,"navTitle":1351,"group":1351,"status":1448},"Subscribe user","\u002Fdocs\u002Fhttp-api\u002Fsubscribe-user","docs\u002F09.http-api\u002F09.subscribe-user",{"title":1482,"path":1483,"stem":1484,"navTitle":1351,"group":1351,"status":1448},"Send invitation","\u002Fdocs\u002Fhttp-api\u002Fsend-invitation","docs\u002F09.http-api\u002F10.send-invitation",{"title":1486,"navTitle":1351,"group":1351,"status":1358,"path":1487,"stem":1488,"children":1489,"page":1400},"Integrations","\u002Fdocs\u002Fintegrations","docs\u002F10.integrations",[1490,1494],{"title":1491,"path":1492,"stem":1493,"navTitle":1351,"group":1351,"status":1358},"RSA Authentication Manager","\u002Fdocs\u002Fintegrations\u002Frsa-authentication-manager","docs\u002F10.integrations\u002F01.rsa-authentication-manager",{"title":1495,"path":1496,"stem":1497,"navTitle":1351,"group":1351,"status":1358},"Zapier","\u002Fdocs\u002Fintegrations\u002Fzapier","docs\u002F10.integrations\u002F02.zapier",{"title":1499,"path":1500,"stem":1501,"navTitle":1351,"group":1351,"status":1358},"Changelog","\u002Fdocs\u002Fchangelog","docs\u002F11.changelog",[1503,1505],{"title":1383,"path":1384,"stem":1385,"description":1504,"children":-1},"What the Wire2Air APIs document about request quotas and the 429 status, and how to retry safely.",{"title":1393,"path":1394,"stem":1395,"description":1506,"children":-1},"Send one message to many recipients in a single request with the REST API or the HTTP API, and name the batch for reporting.",[1508,1512,1515,1518,1521,1524,1527,1530],[1509,1510],"path",{"d":1511},"M3 21l18 0",[1509,1513],{"d":1514},"M3 10l18 0",[1509,1516],{"d":1517},"M5 6l7 -3l7 3",[1509,1519],{"d":1520},"M4 10l0 11",[1509,1522],{"d":1523},"M20 10l0 11",[1509,1525],{"d":1526},"M8 14l0 3",[1509,1528],{"d":1529},"M12 14l0 3",[1509,1531],{"d":1532},"M16 14l0 3",[1534,1536,1539,1542,1545],[1509,1535],{"d":1511},[1509,1537],{"d":1538},"M3 7v1a3 3 0 0 0 6 0v-1m0 1a3 3 0 0 0 6 0v-1m0 1a3 3 0 0 0 6 0v-1h-18l2 -4h14l2 4",[1509,1540],{"d":1541},"M5 21l0 -10.15",[1509,1543],{"d":1544},"M19 21l0 -10.15",[1509,1546],{"d":1547},"M9 21v-4a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v4",[1549,1552,1555,1558],[1509,1550],{"d":1551},"M3 13a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v6a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -6",[1509,1553],{"d":1554},"M15 9a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v10a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -10",[1509,1556],{"d":1557},"M9 5a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v14a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -14",[1509,1559],{"d":1560},"M4 20h14",[1562,1565],[1509,1563],{"d":1564},"M10 3.2a9 9 0 1 0 10.8 10.8a1 1 0 0 0 -1 -1h-6.8a2 2 0 0 1 -2 -2v-7a.9 .9 0 0 0 -1 -.8",[1509,1566],{"d":1567},"M15 3.5a9 9 0 0 1 5.5 5.5h-4.5a1 1 0 0 1 -1 -1v-4.5",[1569,1572,1575],[1509,1570],{"d":1571},"M7 8l-4 4l4 4",[1509,1573],{"d":1574},"M17 8l4 4l-4 4",[1509,1576],{"d":1577},"M14 4l-4 16",[1579,1582,1586,1589],[1509,1580],{"d":1581},"M9 15l6 -6",[1509,1583],{"d":1584,"fill":1585},"M9 9.5a.5 .5 0 1 0 1 0a.5 .5 0 1 0 -1 0","currentColor",[1509,1587],{"d":1588,"fill":1585},"M14 14.5a.5 .5 0 1 0 1 0a.5 .5 0 1 0 -1 0",[1509,1590],{"d":1591},"M3 12a9 9 0 1 0 18 0a9 9 0 1 0 -18 0",[1593,1596,1599,1602],[1509,1594],{"d":1595},"M19.5 12.572l-7.5 7.428l-7.5 -7.428a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572",[1509,1597],{"d":1598},"M12 6l-3.293 3.293a1 1 0 0 0 0 1.414l.543 .543c.69 .69 1.81 .69 2.5 0l1 -1a3.182 3.182 0 0 1 4.5 0l2.25 2.25",[1509,1600],{"d":1601},"M12.5 15.5l2 2",[1509,1603],{"d":1604},"M15 13l2 2",[1606,1609,1612,1615],[1509,1607],{"d":1608},"M12 18h-7a2 2 0 0 1 -2 -2v-10a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v7.5",[1509,1610],{"d":1611},"M3 6l9 6l9 -6",[1509,1613],{"d":1614},"M15 18h6",[1509,1616],{"d":1617},"M18 15l3 3l-3 3",[1619,1622],[1509,1620],{"d":1621},"M21 14l-3 -3h-7a1 1 0 0 1 -1 -1v-6a1 1 0 0 1 1 -1h9a1 1 0 0 1 1 1v10",[1509,1623],{"d":1624},"M14 15v2a1 1 0 0 1 -1 1h-7l-3 3v-10a1 1 0 0 1 1 -1h2",[1626,1629],[1509,1627],{"d":1628},"M15 12.9a5 5 0 1 0 -3.902 -3.9",[1509,1630],{"d":1631},"M15 12.9l-3.902 -3.899l-7.513 8.584a2 2 0 1 0 2.827 2.83l8.588 -7.515",[1633,1636,1639,1642],[1509,1634],{"d":1635},"M15 8h.01",[1509,1637],{"d":1638},"M3 6a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3v-12",[1509,1640],{"d":1641},"M3 16l5 -5c.928 -.893 2.072 -.893 3 0l5 5",[1509,1643],{"d":1644},"M14 14l1 -1c.928 -.893 2.072 -.893 3 0l3 3",[1646,1649,1652,1655,1658,1661],[1509,1647],{"d":1648},"M7 12l5 5l-1.5 1.5a3.536 3.536 0 1 1 -5 -5l1.5 -1.5",[1509,1650],{"d":1651},"M17 12l-5 -5l1.5 -1.5a3.536 3.536 0 1 1 5 5l-1.5 1.5",[1509,1653],{"d":1654},"M3 21l2.5 -2.5",[1509,1656],{"d":1657},"M18.5 5.5l2.5 -2.5",[1509,1659],{"d":1660},"M10 11l-2 2",[1509,1662],{"d":1663},"M13 14l-2 2",[1665,1668],[1509,1666],{"d":1667},"M22 9l-10 -4l-10 4l10 4l10 -4v6",[1509,1669],{"d":1670},"M6 10.6v5.4a6 3 0 0 0 12 0v-5.4",[1672,1675,1678],[1509,1673],{"d":1674},"M18 8a3 3 0 0 1 0 6",[1509,1676],{"d":1677},"M10 8v11a1 1 0 0 1 -1 1h-1a1 1 0 0 1 -1 -1v-5",[1509,1679],{"d":1680},"M12 8l4.524 -3.77a.9 .9 0 0 1 1.476 .692v12.156a.9 .9 0 0 1 -1.476 .692l-4.524 -3.77h-8a1 1 0 0 1 -1 -1v-4a1 1 0 0 1 1 -1h8",[1682,1685,1688,1691,1694],[1509,1683],{"d":1684},"M6 4h-1a2 2 0 0 0 -2 2v3.5a5.5 5.5 0 0 0 11 0v-3.5a2 2 0 0 0 -2 -2h-1",[1509,1686],{"d":1687},"M8 15a6 6 0 1 0 12 0v-3",[1509,1689],{"d":1690},"M11 3v2",[1509,1692],{"d":1693},"M6 3v2",[1509,1695],{"d":1696},"M18 10a2 2 0 1 0 4 0a2 2 0 1 0 -4 0",[1698,1701,1704,1707,1710,1713],[1509,1699],{"d":1700},"M8 21l8 0",[1509,1702],{"d":1703},"M12 17l0 4",[1509,1705],{"d":1706},"M7 4l10 0",[1509,1708],{"d":1709},"M17 4v8a5 5 0 0 1 -10 0v-8",[1509,1711],{"d":1712},"M3 9a2 2 0 1 0 4 0a2 2 0 1 0 -4 0",[1509,1714],{"d":1715},"M17 9a2 2 0 1 0 4 0a2 2 0 1 0 -4 0",[1717,1720,1723,1726],[1509,1718],{"d":1719},"M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0",[1509,1721],{"d":1722},"M16 19h6",[1509,1724],{"d":1725},"M19 16v6",[1509,1727],{"d":1728},"M6 21v-2a4 4 0 0 1 4 -4h4",3529977955]