1 2<!DOCTYPE HTML> 3<html lang="en"> 4 <head> 5 <meta charset="UTF-8"/> 6 7 8 <meta name="description" content="24 Hour Fitness is the perfect gym for people who want it all: 9the best fitness classes, premium gym amenities and much more. 10Try a 24 Hour Fitness gym near you."/> 11 <meta name="template" content="home-page-v2"/> 12 13 14 15 16<meta name="content-page-ref" content="NkE-g_vFc1_rCa2v9fuy00SMyOJpzUQuzSDYZ-FNSYWea5ZaX8-IOpNLzMD6rCA9"/> 17<link rel="canonical" href="https://www.24hourfitness.com/"/> 18 19 20 21 22 23 24 25<!-- Google Tag Manager -->
26<script>
vendor: 412 bytes, lines 26-33
26(function (w, d, s, l, i) { 27 w[l] = w[l] || []; w[l].push({ 28 'gtm.start': 29 new Date().getTime(), event: 'gtm.js' 30 }); var f = d.getElementsByTagName(s)[0], 31 j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 32 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); 33 })(window, document, 'script', 'dataLayer', '
33GTM-MGB475
vendor: 3 bytes, line 33
33');
33</script>
33 34<!-- End Google Tag Manager --> 35 36<meta charset="utf-8"/> 37 38<title>Gym Memberships and Personal Training | 24 Hour Fitness</title> 39 40 41 42 43 44<meta name="keywords" content="Gyms near me, find a gym, fitness club, personal training, fitness classes, gym membership, best gyms, yoga class, pool, Zumba class, cycle class, gyms with daycare, Pilates class, strength training, gyms open 24 hours, find a personal trainer, health club, health clubs near me, free gym pass, free health club pass, 40th Anniversary 24 Hour Fitness, High School Free Pass, Mejores gimnasios cerca de mi, city sport club, mygym, gimnasio, fitness la, private gyms"/> 45<meta name="description" content="24 Hour Fitness is the perfect gym for people who want it all: 46the best fitness classes, premium gym amenities and much more. 47Try a 24 Hour Fitness gym near you."/> 48 49<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"/> 50 51 52<link rel="shortcut icon" type="image/ico" href="/etc/designs/24-hour-fitness/images/favicon.ico"/> 53 54 55<meta property="og:site_name" content="24 hour fitness"/> 56<meta property="og:url" content="https://www.24hourfitness.com/"/> 57<meta property="og:type" content="article"/> 58<meta property="og:title" content="Gym Memberships and Personal Training | 24 Hour Fitness"/> 59<meta property="og:locale" content="en_US"/> 60<meta property="og:description" content="24 Hour Fitness is the perfect gym for people who want it all: 61the best fitness classes, premium gym amenities and much more. 62Try a 24 Hour Fitness gym near you."/> 63 64<meta property="article:publisher" content="123008664414338"/> 65 66 67<meta name="twitter:card" content="summary"/> 68 69<meta name="twitter:site" content="24HourFitness"/> 70 71 72 73 74 75 76 77
78<script> 79 80 digitalData = { 81 page:{ 82 pageInfo: { 83 siteName: "24hf", 84 pageCategory: "home", 85 pageName: "24hf|home|about|homepage"} 86 } 87 }; 88 89</script>
89 90 91<!-- This section is for DTM -->
92<script src="//assets.adobedtm.com/71852ad07f5e188eafeee2abd086c5e438a1fb11/satelliteLib-1832739fe19bfb3c04a5db34125c728c96bbb5ca.js"></script>
92 93 94 95<!-- This section is for DTM --> 96
97<script> 98 99 100 globalData = { 101 env: "prod", 102 apiEndpoint: "//api.24hourfitness.com", 103 envSettings: "prodSettings", 104 instance24hf: "https://www.24hourfitness.com" 105 }; 106 107</script>
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
123<script id="usntA42start" src="https://a42cdn.usablenet.com/a42/24hourfitness/default/prod/cs-start" async data-rapid="true"></script>
123 124 125 126 127 128 129 130 131 132 133<link rel="stylesheet" href="/etc/designs/24-hour-fitness-jquery.min.css" type="text/css"> 134<link rel="stylesheet" href="/etc/designs/24-hour-fitness-global.min.css" type="text/css"> 135<link rel="stylesheet" href="/etc/designs/24-hour-fitness-navigation.min.css" type="text/css"> 136<link rel="stylesheet" href="/etc/designs/24-hour-fitness-home/clientlib-components-home.min.css" type="text/css">
137<script src="/etc.clientlibs/clientlibs/granite/clientlibrarymanager.min.js"></script>
vendor: 1 bytes, line 137
137
138<script> 139 GraniteTiming.stamp('loaded /etc.clientlibs/clientlibs/granite/clientlibrarymanager.min.js'); 140</script>
140 141 142 143 144 145 146 147 148</head> 149 <body class="home-page-v2 basicpage" id="home-page-v2-d150014786" data-cmp-data-layer-enabled> 150
150<script> 151 window.adobeDataLayer = window.adobeDataLayer || []; 152 adobeDataLayer.push({ 153 page: JSON.parse("{\x22home\u002Dpage\u002Dv2\u002Dd150014786\x22:{\x22@type\x22:\x2224\u002Dhour\u002Dfitness\/components\/page\/home\u002Dpage\u002Dv2\x22,\x22repo:modifyDate\x22:\x222026\u002D09\u002D29T06:57:30Z\x22,\x22dc:title\x22:\x22Gym Memberships and Personal Training\x22,\x22dc:description\x22:\x2224 Hour Fitness is the perfect gym for people who want it all:\\r\\nthe best fitness classes, premium gym amenities and much more.\\r\\nTry a 24 Hour Fitness gym near you.\x22,\x22xdm:template\x22:\x22\/conf\/24\u002Dhour\u002Dfitness\/settings\/wcm\/templates\/home\u002Dpage\u002Dv2\x22,\x22xdm:language\x22:\x22en\x22,\x22xdm:tags\x22:[],\x22repo:path\x22:\x22\/content\/24\u002Dhour\u002Dfitness\/en.html\x22}}"), 154 event:'cmp:show', 155 eventInfo: { 156 path: 'page.home\u002Dpage\u002Dv2\u002Dd150014786' 157 } 158 }); 159 </script>
159 160 161 162 163 164 165 166 167 168 169 170 171 172<div class="root responsivegrid"> 173 174 175<div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> 176 177 <div class="u01-global-header aem-GridColumn aem-GridColumn--default--12"> 178 179 180<div id="global-nav-24"></div> 181 182<div class="button-top"><a href="#page-content" aria-label="Back to the top"><i class="fa fa-angle-up" aria-hidden="true"></i></a></div></div> 183<div class="container-24 aem-GridColumn aem-GridColumn--default--12"> 184 185<div class="container-24" id="page-content"> 186 187 188<div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> 189 190 <div class="responsivegrid aem-GridColumn aem-GridColumn--default--12"> 191 192 193<div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> 194 195 <div class="promo-banner aem-GridColumn aem-GridColumn--default--12"> 196 197 198 199 200 201<div class="promo-container" id="promoBanner"> 202 <div class="promo-info"> 203 <div class="promo-image"> 204 <div class="image-container-24"> 205 <picture> 206 <source type="image/webp" srcset="/content/dam/24-hour-fitness/promo/specials/2026/keepfs/desktop4.webp" media="(min-width: 641px)"/> 207 <source type="image/jpg" srcset="/content/dam/24-hour-fitness/promo/specials/2026/keepfs/desktop4.jpg" media="(min-width: 641px)"/> 208 <source type="image/webp" srcset="/content/dam/24-hour-fitness/promo/specials/2026/keepfs/mobile4.webp"/> 209 <source type="image/jpg" srcset="/content/dam/24-hour-fitness/promo/specials/2026/keepfs/mobile4.jpg"/> 210 <img class="banner-small full-img" src="/content/dam/24-hour-fitness/promo/specials/2026/keepfs/mobile4.jpg" alt="Limited time offer! Join us with a KeepFit+ membership for the price of KeepFit."/> 211 <img class="banner-regular full-img" src="/content/dam/24-hour-fitness/promo/specials/2026/keepfs/desktop4.jpg" alt="Limited time offer! Join us with a KeepFit+ membership for the price of KeepFit."/> 212 </picture> 213 </div> 214 </div> 215 216 217 218 <div class="headline"> 219 <div class="headline-text"></div> 220 <div class="tagline"></div> 221 <div class="headline-subText"></div> 222 </div> 223 224 <div class="disclaimer"><p>Online only. Select KeepFit+ memberships. $69.99 Annual Fee required. Initial dues and appilicable fees payable at enrollment. Restrictions apply. <a class="show-disclaimer" href="#">Click for details</a></p> 225 226 </div> 227 228 <div class="container-disclaimer"> 229 <div class="legaldisclaimer"><p>*Offer available online only. Offer valid on select KeepFit+ monthly and prepaid dues memberships. Offer is for individual membership only. Membership benefits and club access depend on membership level and club tier purchased. KeepFit+ memberships include access to designated Premium Wellness Benefits. Sport tier memberships include access to all 24 Hour Fitness® Sport clubs, Super-Sport tier memberships include access to all 24 Hour Fitness® Sport and Super-Sport clubs, Ultra-Sport tier memberships include access to all Sport, Super-Sport and Ultra-Sport clubs nationwide (does not include access to Founders Club). Selected club of enrollment must be within 50 miles of purchaserâs residence. $1 Join fee, $4.99 Membership Activation Fee and first monthâs dues payable at time of enrollment for monthly memberships (Last monthâs dues in NY). First Year Membership Dues and $4.99 Membership Activation Fee payable at time of enrollment for prepaid dues memberships. Certain memberships auto-renew yearly. $69.99 Annual Fee required for all memberships and is in addition to the yearly membership renewal dues and will be billed on the 15th day after the date of enrollment. See membership agreement for future annual fee details. No annual fee charged in HI and NV. Membership dues and annual fees must be paid by preauthorized electronic funds transfer (EFT). Taxes may apply. Membership dues and annual fees are subject to increase. Member may designate one (1) individual as their Buddy to bring with them each visit to work out together. Member may change their designated Buddy once every six (6) months. Designated buddy must show Photo ID and sign a waiver before entering the facility. Member must be always present with their buddy. Should member cancel their membership the designated Buddy Pass user will no longer have access to facilities. Premium Wellness Benefits, certain services and amenities not available for Buddy Pass users. Buddy Pass user must be 18 years old or 12 with parent. KeepFit+ memberships may not be available at all locations. Offer not available in TX. No other discounts with this offer. Membership offerings may expire without prior notice. See club for hours and complete details. Exclusions and restrictions apply. Offer not valid for current members. Offer not available at all locations. </p> 230<p>Must be 18 years old or 12 with parent to enroll in a membership. Facilities, classes, and amenities vary per location. Membership agreement does not include group or individual training, specialized classes, or special services that are subject to separate agreements with 24 Hour and may require payment of a fee.  </p> 231<p>© 2026 24 Hour Fitness USA, LLC, P.O. Box 2689, Carlsbad, CA 92018.</p> 232</div> 233 <a class="disclaimer-close" href="#">x close</a> 234 </div> 235 </div> 236 237 <div class="countdown-container"> 238 239 240 241 242 243 244 245<article class="countdown-component" data-speed=" " style="background: ; color: ;"> 246 <div class="countdown-container"> 247 <div class="slide"> 248 249 250 251 <div class="countdown-element "> 252 253 254 255 256 257 258 <div> 259 260
261<script src="/etc/designs/24-hour-fitness-jquery.min.js"></script>
vendor: 1 bytes, line 261
261
262<script> 263 GraniteTiming.stamp('loaded /etc/designs/24-hour-fitness-jquery.min.js'); 264</script>
vendor: 1 bytes, line 264
264
265<script src="/etc/designs/24hf-countdown.min.js"></script>
vendor: 1 bytes, line 265
265
266<script> 267 GraniteTiming.stamp('loaded /etc/designs/24hf-countdown.min.js'); 268</script>
268 269 270 271 272 <span class="h1 title-24" id="clock"></span> 273 <input type="hidden" id="displayformat" value="2026/10/06"/> 274 <input type="hidden" id="timeZone" value="PDT"/> 275
275<script> 276 var endDate = $("#displayformat").val() + ' ' + $("#timeZone").val(); 277 var dateSelected = new Date(endDate); 278 279 280 $('#clock').countdown(dateSelected, function(event) { 281 $(this).html(event.strftime('<div class="counterdown"><div class="counterDate">%D<span>days</span> </div><div class="counterDate">%H<span>hours</span></div><div class="counterDate">%M<span>minutes</span></div><div class="counterDate"> %S<span>seconds</span></div></div>')); 282 }); 283 284 </script>
284 285 </div> 286 </div> 287 288 289 290 291 </div> 292 </div> 293 </article> 294 295 </div> 296 297</div> 298<div class="clear"></div> </div> 299<div class="c07-html-component aem-GridColumn aem-GridColumn--default--12"> 300 301 302 303 304 305 306<style> 307.smart-zip-code { 308display:none; 309 background: #e9eced; 310 padding: 16px 0; 311} 312 313.smart-zip-code .autocomplete-component{ 314 background-color: unset; 315 margin: 0 auto; 316} 317 318.smart-zip-code .autocomplete-component input{ 319 padding: 20px; 320} 321 322.smart-zip-code .autocomplete-component .search-section{ 323 margin-bottom: 0; 324} 325 326.smart-zip-code .autocomplete-component .location-search-button.disabled{ 327 background: #6e7377; 328 color: #fff !important; 329} 330 331.smart-zip-code .autocomplete-component .location-search-button{ 332 height: 41px; 333 min-width: 155px; 334 padding: 7px 20px; 335} 336 337 #regular-ribbon{ 338 display: none; 339 } 340 341 @media (min-width: 1024px) { 342 #geo-ribbon{ 343 display: none; 344 } 345 346 #regular-ribbon{ 347 display: block; 348 } 349 } 350 351 352 .promo-container .disclaimer { 353 //background: #000; 354 } 355 356 357 .legaldisclaimer { 358 line-height: 11px; 359 font-size: 8.5px; 360 } 361 362 .promo-container .container-disclaimer { 363 padding: 12px 10px 15px; 364 } 365 366 367 .promo-container .disclaimer { 368 color: white !important; 369 padding: 0; 370 bottom: 0px; 371 font-size: 10px !important; 372 position: absolute; 373 padding: 4px 10px!important; 374 line-height: 0 !important; 375 text-shadow: 1px 1px 2px #000; 376 } 377 378 .promo-container .disclaimer p { 379 margin-bottom: 0 !important; 380 line-height: 14px; 381 } 382 383 .countdown-container .countdown-component .countdown-container { 384 position: relative; 385 } 386 387 .countdown-container .countdown-component .countdown-container:after { 388 content: ""; 389 display: block; 390 width: 280px; 391 height: 60px; 392 background: #012387; 393 position: absolute; 394 top: -3px; 395 left: 50%; 396 z-index: -2; 397 margin-left: -140px; 398 } 399 400 @media (max-width: 1023px) { 401 .countdown-container .countdown-component .countdown-container:after { 402 width: 210px; 403 height: 47px; 404 left: 50%; 405 margin-left: -106px; 406 } 407 } 408 409 /*@media(min-width:1150px) { 410 .counterdown .counterDate{ 411 font-size:25px; 412 } 413 } 414 415 @media (min-width: 1470px) { 416 .countdown-container .countdown-component .countdown-container:after{ 417 height: 60px; 418 } 419 } 420 421 @media(min-width:1470px) { 422 .counterdown .counterDate{ 423 font-size:20px; 424 } 425 }*/ 426 427 .countdown-container { 428 bottom: 54%; 429 /*text-shadow: 0px 0px 7px #00000054;*/ 430 } 431 432 @media (min-width: 641px) { 433 .countdown-container { 434 bottom: 13% !important; 435 left: -12%; 436 } 437 } 438 439 @media (min-width: 1024px) { 440 .countdown-container { 441 bottom: 11% !important; 442 left: -13%; 443 } 444 } 445 446 @media (min-width: 1225px) { 447 .countdown-container { 448 bottom: 15% !important; 449 left: -13%; 450 } 451 } 452 453 @media (min-width: 1490px) { 454 .countdown-container { 455 bottom: 17% !important; 456 left: -13%; 457 } 458 } 459 460 461 .counterdown .counterDate{ 462 color: #fff; 463 } 464 465 @media (max-width: 1023px) { 466 .counterdown .counterDate{ 467 color: #fff; 468 font-size: 25px; 469 padding: 0 10px; 470 } 471 } 472 473 474 .counterdown .counterDate::after { 475 border-right: 1px solid #fff; 476 } 477 478 </style> 479</div> 480<div class="smart-zip-code aem-GridColumn aem-GridColumn--default--12"> 481 482 483 484<div class="autocomplete-component main-column--no-float clearfix">
485 <div class="autocomplete-label"></div> 486 <section class="search-section"> 487 <div class="input-wrapper"> 488 <input type="text" id="autocomplete-input" placeholder="Enter Zip, City or State" autocomplete="off"/> 489 <button id="clear-input" title="Clear Input" aria-label="Clear input"> 490 <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" viewBox="0 0 16 16"> 491 <path d="M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z"/> 492 </svg> 493 </button> 494 <ul id="autocomplete-results" class="results-list hidden"></ul> 495 </div> 496 <a id="location-search-link" href="#" class="location-search-button disabled">CHECK PRICES</a> 497 </section> 498</div> 499</div> 500<div class="container-color aem-GridColumn aem-GridColumn--default--12"> 501 502 503 504 505 506 507 508 509<div class="container-background-color" id="regular-ribbon" style="background: none"> 510 511 <div class="dynamic-ribbon section"> 512 513 514 515 516 517 518 519 520 521 522 523 524<div class="container-24"> 525 <div class="dr"> 526 <section class="main-column--no-float clearfix"> 527 <section class="col-sm-12"> 528 <div class="dr_container"> 529 <div class="dr_txt">SPECIALS ON NOW</div> 530 <div class="dr_cta"> 531 532 <a href="/gyms/find-a-gym/?type=join">CHECK PRICES</a> 533 </div> 534 </div> 535 </section> 536 </section> 537 </div> 538 539</div> 540</div> 541 542 543 544</div> 545</div> 546<div class="c07-html-component aem-GridColumn aem-GridColumn--default--12"> 547 548 549 550 551 552 553<div id="geo-ribbon"> 554<div id="geo-widget"></div> 555</div> 556</div> 557<div class="amenities-home aem-GridColumn aem-GridColumn--default--12"> 558 559 560 561 <div class="amenities_hp"> 562 <section class="main-column--no-float clearfix"> 563 <section class="col-sm-12 amn"> 564 <div class="ahp_item1"> 565 <div class="ahp_cont-item1"> 566 <div class="ahp_title"> 567 AMENITIES 568 </div> 569 <div class="ahp_sub">FEATURING</div> 570 <div class="ahp_txt"> 571 <ul> 572 573 <li>Cardio & Weights </li> 574 575 <li>Turf Zones</li> 576 577 <li>Pool and Spa</li> 578 579 <li>Yoga</li> 580 581 <li>Pilates</li> 582 583 <li>Zumba and HIIT</li> 584 585 <li>Sauna & Recovery</li> 586 587 <li>Personal Training</li> 588 589 </ul> 590 </div> 591 </div> 592 </div> 593 <div class="ahp_item2"> 594 <div class="ahp_title">LOCATIONS</div> 595 <div class="ahp_sub">235+</div> 596 <div class="ahp_sub2 location"> 597 <ul> 598 599 <li>CA</li> 600 601 <li>TX</li> 602 603 <li>CO</li> 604 605 <li>HI</li> 606 607 <li>NV</li> 608 609 <li>OR</li> 610 611 <li>WA</li> 612 613 <li>NY</li> 614 615 <li>NJ</li> 616 617 </ul> 618 </div> 619 </div> 620 <div class="ahp_item3"> 621 <div class="ahp_title">MOBILE APP</div> 622 <div class="ahp_sub">FREE</div> 623 <div class="ahp_sub2"> 624 <ul> 625 626 <li>2K+ Workouts</li> 627 628 <li>Reserve Classes</li> 629 630 <li>Streaks</li> 631 632 <li>Goal Tracking</li> 633 634 </ul> 635 </div> 636 </div> 637 </section> 638 </section> 639 </div> 640</div> 641<div class="c07-html-component aem-GridColumn aem-GridColumn--default--12"> 642 643 644 645 646 647 648<div class="br-cont"> 649 <div class="link-button-24"> 650 <a href="/membership/membership-options/" aria-label="membership options page">LEARN MORE</a> 651 </div> 652 <div class="link-button-24"> 653 <a href="/membership/free-guest-gym-pass/?pass=CLUBPASS" aria-label="generate a try us pass">TRY US FREE</a> 654 </div> 655</div> 656 657<style> 658 .br-cont{ 659 background: #000; 660 padding: 10px 0px; 661 text-align: center; 662 663 } 664 .br-cont .link-button-24 { 665 background: none !important; 666 border: 1px solid #fff; 667 text-align: center; 668 } 669 .br-cont .link-button-24 a{ 670 padding: 9px 18px; 671 padding-top: 10px; 672 display: inline-block; 673 } 674</style> 675</div> 676 677 678</div> 679</div> 680 681 682</div> 683</div> 684</div> 685<div class="u02-global-footer aem-GridColumn aem-GridColumn--default--12"> 686 687 688<div id="global-footer-24"></div> 689 <!-- OneTrust Cookies Consent Notice start for 24hourfitness.com -->
690<script src="https://cdn.cookielaw.org/scripttemplates/otSDKStub.js" type="text/javascript" charset="UTF-8" data-domain-script="234dcd04-4a0b-4e9a-b6fe-3add9f4c9ffd"></script>
vendor: 1 bytes, line 690
690
691<script type="text/javascript"> 692function OptanonWrapper() { } 693</script>
693 694<!-- OneTrust Cookies Consent Notice end for 24hourfitness.com --> 695 696 697</div> 698 699 700</div> 701</div> 702 703 704 705 706
707<script src="/etc/designs/24-hour-fitness-global.min.js"></script>
vendor: 1 bytes, line 707
707
708<script> 709 GraniteTiming.stamp('loaded /etc/designs/24-hour-fitness-global.min.js'); 710</script>
vendor: 1 bytes, line 710
710
711<script src="/etc/designs/24-hour-fitness-navigation.min.js"></script>
vendor: 1 bytes, line 711
711
712<script> 713 GraniteTiming.stamp('loaded /etc/designs/24-hour-fitness-navigation.min.js'); 714</script>
vendor: 1 bytes, line 714
714
715<script src="/etc/designs/24-hour-fitness-home/clientlib-components-home.min.js"></script>
vendor: 1 bytes, line 715
715
716<script> 717 GraniteTiming.stamp('loaded /etc/designs/24-hour-fitness-home/clientlib-components-home.min.js'); 718</script>
718 719 720 721 722 723 724 725 726
727<script src="/etc/designs/24-hour-fitness-global-geo-widget.min.js"></script>
vendor: 1 bytes, line 727
727
728<script> 729 GraniteTiming.stamp('loaded /etc/designs/24-hour-fitness-global-geo-widget.min.js'); 730</script>
730 731 732 733 734 735 736 737 738 739
740<script src="/etc.clientlibs/core/wcm/components/commons/datalayer/v1/clientlibs/core.wcm.components.commons.datalayer.v1.min.js"></script>
vendor: 1 bytes, line 740
740
741<script> 742 GraniteTiming.stamp('loaded /etc.clientlibs/core/wcm/components/commons/datalayer/v1/clientlibs/core.wcm.components.commons.datalayer.v1.min.js'); 743</script>
743 744 745 746 747 748 749 750 751 752 753 754 755 </body> 756</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.